二叉搜索树的第k个节点

给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8)    中,按结点数值大小顺序第三小结点的值为4。

= =一看就想到中序遍历

public class Solution {
    TreeNode KthNode(TreeNode pRoot, int k)
    {
    	if(pRoot==null||k==0) {
    		return null;
    	}
    	
    	ArrayList<TreeNode> list = new ArrayList<>();
    	list=inOrder(list, pRoot);
    	//要注意这个地方越界
        if(k>list.size()) {
    		return null;
    	}
    	return list.get(k-1);
    }
    
    public ArrayList<TreeNode> inOrder(ArrayList<TreeNode> list,TreeNode pRoot){
    	if(pRoot==null) {
    		return list;
    	}
    	
    	if(pRoot.left!=null) {
    		list=inOrder(list, pRoot.left);
    	}
    	list.add(pRoot);
    	if(pRoot.right!=null) {
    		list=inOrder(list, pRoot.right);
    	}
    	return list;
    }
    
    public static void main(String[] args) {
		TreeNode n1 = new TreeNode(8);
		TreeNode n2 = new TreeNode(6);
		TreeNode n3 = new TreeNode(10);
		TreeNode n4 = new TreeNode(5);
		TreeNode n5 = new TreeNode(7);
		TreeNode n6 = new TreeNode(9);
		TreeNode n7 = new TreeNode(11);
		n1.left=n2;
		n1.right=n3;
		n2.left=n4;
		n2.right=n5;
		n3.left=n6;
		n3.right=n7;
		new Solution().KthNode(n1, 1);
	}

}        

  

原文地址:https://www.cnblogs.com/figsprite/p/10673053.html