题目描述

思路
- 由于是求第K大,所以用右—中—左的方式进行中序遍历,当计数=k时,返回即可。
版本1:迭代
class Solution {
public int kthLargest(TreeNode root, int k) {
int count = 0;
Stack<TreeNode> stack = new Stack<>();
TreeNode node = root;
while (!stack.isEmpty() || node != null) {
if (node != null) {
stack.push(node);
node = node.right;
} else {
TreeNode father = stack.pop();
count++;
if (count == k) {
return father.val;
}
node = father.left;
}
}
return 0;
}
}
版本2:递归
class Solution {
int res = 0;
int count = 0;
public int kthLargest(TreeNode root, int k) {
dfs(root, k);
return res;
}
public void dfs(TreeNode node, int k) {
if (node == null) {
return;
}
dfs(node.right,k);
count++;
if (count == k) {
res = node.val;
return;
}
dfs(node.left, k);
}
}