题目描述
解题思路
可以使用倒中序遍历。
注意k不能作为参数,因为先遍历右节点,k会先传给它,而不是先减一。k应该作为全局变量。
class Solution {
public int kthLargest(TreeNode root, int k) {
this.k = k;
traversal(root);
return res;
}
int res = 0;
int k = 0;
// 倒中序遍历
public void traversal(TreeNode root) {
if (root == null) return;
traversal(root.right);
if (k == 0) return;
if (--k == 0) res = root.val;
traversal(root.left);
}
}
也可以找倒序的第k个节点
public int kthLargest(TreeNode root, int k) {
traversal(root, k);
return k > list.size() ? 0 : list.get(list.size() - k);
}
List<Integer> list = new ArrayList<>();
public void traversal(TreeNode root, int k) {
if (root == null) {
return;
}
if (root.left != null) kthLargest(root.left, k);
list.add(root.val);
if (root.right != null) kthLargest(root.right, k);
}