剑指offer:面试题54—二叉搜索树的第K大节点

题目描述

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

解决:

中序遍历。

1.利用栈

    TreeNode KthNode(TreeNode pRoot, int k)
    {
        Stack stack=new Stack<>();
        int count=0;
        while(pRoot!=null || !stack.isEmpty()){
            if(pRoot!=null){
                stack.push(pRoot);
                pRoot=pRoot.left;
            }else{
                pRoot=stack.pop();
                count++;
                if(count==k) return pRoot;
                pRoot=pRoot.right;
            }
        }
           return null;
    }

2.递归

    int index=0;
    TreeNode KthNode(TreeNode pRoot, int k)
    {
        if(pRoot!=null){
            TreeNode node=KthNode(pRoot.left,k);
            if(node!=null) return node;
            index++;
            if(index==k) return pRoot;
            node=KthNode(pRoot.right,k);
            if(node!=null) return node;
        }
        return null;
    }

 

你可能感兴趣的:(剑指offer)