package com.heu.wsq.leetcode.tree;
import java.util.Deque;
import java.util.LinkedList;
/**
* 剑指 Offer 54. 二叉搜索树的第k大节点
* @author wsq
* @date 2020/12/21
* 给定一棵二叉搜索树,请找出其中第k大的节点。
*
* 示例 1:
* 输入: root = [3,1,4,null,2], k = 1
* 3
* / \
* 1 4
* \
* 2
* 输出: 4
*
* 链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-di-kda-jie-dian-lcof
*/
public class KthLargest {
/**
* 迭代 + 栈
* 遇到一个新节点,首先直接遍历到最右边的节点,这时候下次出栈的节点将是目前最大的元素
* @param root
* @param k
* @return
*/
public int kthLargest(TreeNode root, int k){
Deque<TreeNode> stack = new LinkedList<>();
int ans = 0;
stack.push(root);
boolean flag = true;
while (!stack.isEmpty() && k > 0){
if (flag){
TreeNode peek = stack.peek();
while (peek.right != null){
stack.push(peek.right);
peek = peek.right;
}
flag = false;
}else{
TreeNode pop = stack.pop();
ans = pop.val;
k--;
if (pop.left != null){
stack.push(pop.left);
flag = true;
}
}
}
return ans;
}
}
剑指 Offer 54. 二叉搜索树的第k大节点
最新推荐文章于 2022-12-29 11:22:57 发布
本文介绍了一种利用迭代和栈结构解决二叉搜索树中寻找第k大节点的方法。通过遍历树的右子节点直至最右侧,再回溯至左子节点的方式,实现了高效查找。
4002

被折叠的 条评论
为什么被折叠?



