剑指 Offer 54. 二叉搜索树的第k大节点

剑指 Offer 54. 二叉搜索树的第k大节点

给定一棵二叉搜索树,请找出其中第k大的节点。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-di-kda-jie-dian-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution {
    public int kthLargest(TreeNode root, int k) {
        Stack<TreeNode> stack = new Stack<>();
        int count = 1;    //根节点本身算1
        while(Objects.nonNull(root) || !stack.empty()){
            while(Objects.nonNull(root)){
                stack.push(root);   //不为空 则入栈
                root = root.right;   //右子树比根大,所以下一步直接到右子树
            }
            TreeNode pop = stack.pop();
            if(count == k){
                return pop.val;  //已经找到为第k个大的节点
            }
            count++;
            root = pop.left;   //右节点的遍历以后,来到子根节点的左子树 
        }
        return 0;
    }
}
posted @ 2021-01-06 09:22  xiaoff  阅读(56)  评论(0编辑  收藏  举报