leetcode 剑指offer 54.二叉搜索树的第k大节点
程序员文章站
2022-07-01 17:10:35
...
原题
题解
关于二叉搜索树
方法一
按照右根左的方式进行搜索,并把值放入栈,直到栈的大小为k,终止,取顶值。
本思路java代码示例:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
/*
@v7fgg
执行用时:1 ms, 在所有 Java 提交中击败了45.39%的用户
内存消耗:38.7 MB, 在所有 Java 提交中击败了100.00%的用户
2020年7月28日 8:56
*/
class Solution {
//用栈来存从大到小的数,直到栈大小为k,停止并取出顶值
Stack<Integer> stack;
int k;
public int kthLargest(TreeNode root, int k) {
this.k=k;
stack=new Stack<>();
ersoucunchu(root);
return stack.peek();
}
public void ersoucunchu(TreeNode a){
if(a==null){return;}//空节点没有
ersoucunchu(a.right);//先找每个节点的右叉
//中间一旦到k个,立即跳出
if(stack.size()==k){return;}
//不够k则需要添加本根节点,再在左叉用同样方式
stack.add(a.val);
ersoucunchu(a.left);
}
}