剑指 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;
}
}