二叉搜索树的第k个结点

Posted by DH on August 1, 2017

题目

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

分析

二叉搜索树(二叉排序树)的满足:

(1) 左子树上的节点小于根节点,右子树的节点大于根节点,他的左右子树也分别是二叉排序树。

这颗二叉搜索树的中序遍历是: 2,3,4,5,6,7

因此,排好序之后,我们想输出第几个节点,就输出第几个节点。

代码

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    int index = 0;
    TreeNode KthNode(TreeNode pRoot, int k)
    {
      
	        if (pRoot != null) {
                
	          	TreeNode temp = KthNode(pRoot.left, k);
	          	if (temp != null) {
              return temp;
				}
	          	
	          	index ++;
	          	if (index == k) {
              return pRoot;
				}
	          	
	          	temp = KthNode(pRoot.right, k);
	          	if (temp != null) {
              return temp;
				}
			}
	        return null;
    }


}