题目描述
解题思路
可以使用倒中序遍历。
注意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);}
