二叉搜索树的第k大节点——leetcode54
二叉搜索树的第k大节点
题目:二叉搜索树的第k大节点
给定一棵二叉搜索树,请找出其中第 k
大的节点的值。
示例:
输入: root = [3,1,4,null,2], k = 1
3
/ \
1 4
\
2
输出: 4
题解
方法1:分治法
class Solution {
int step, result;
public void dfs(TreeNode root)
{
if(root==null) return;
dfs(root.right);
if(--step==0) { result=root.val; return;}
dfs(root.left);
}
public int kthLargest(TreeNode root, int k) {
step=k;
dfs(root);
return result;
}
}
方法2:非递归实现右根左遍历
class Solution0 {
public int kthLargest(TreeNode root, int k) {
Stack<TreeNode> stack=new Stack<>();
//压入所有右节点:遍历右根
while (root!=null)
{
stack.push(root);
root=root.right;
}
for(int i=0;i<k-1;i++)
{
TreeNode temp=stack.pop();
//压入左子树的所有右节点
if(temp.left!=null)
{
temp=temp.left;
while (temp!=null)
{
stack.add(temp);
temp=temp.right;
}
}
}
return stack.pop().val;
}
}