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

题目:

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

思路:

利用中序遍历,二叉搜索树的中序遍历就是从小到大排序之后的数组,所以,我把树进行中序遍历,用count标记第几个,那么就可以找到第k个小的数了

代码:

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

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

    }

}
*/
public class Solution {
    private int count=0;
    private TreeNode result;
    TreeNode KthNode(TreeNode pRoot, int k)
    {
        //每次都返回一个节点很复杂,
        //所以,我可以就是进行中序遍历,然后达到k的时候就记录一下节点
        //已经找到的时候,后面就不必遍历了,就一直return就可以了
        inOrder(pRoot,k);
        return result;
    }
    private void inOrder(TreeNode pRoot, int k)
    {
        if(pRoot==null||count>=k)
        {
            return;
        }
        inOrder(pRoot.left,k);
        //中序遍历意味着count++这部分代码要在中间执行
        count++;
        if(count==k)
        {
            result=pRoot;
        }
        inOrder(pRoot.right,k);
    }


}

 

你可能感兴趣的:(java,剑指offer,二叉树)