题目描述

image.png

解题思路

可以使用倒中序遍历。

注意k不能作为参数,因为先遍历右节点,k会先传给它,而不是先减一。k应该作为全局变量。

  1. class Solution {
  2. public int kthLargest(TreeNode root, int k) {
  3. this.k = k;
  4. traversal(root);
  5. return res;
  6. }
  7. int res = 0;
  8. int k = 0;
  9. // 倒中序遍历
  10. public void traversal(TreeNode root) {
  11. if (root == null) return;
  12. traversal(root.right);
  13. if (k == 0) return;
  14. if (--k == 0) res = root.val;
  15. traversal(root.left);
  16. }
  17. }

也可以找倒序的第k个节点

  1. public int kthLargest(TreeNode root, int k) {
  2. traversal(root, k);
  3. return k > list.size() ? 0 : list.get(list.size() - k);
  4. }
  5. List<Integer> list = new ArrayList<>();
  6. public void traversal(TreeNode root, int k) {
  7. if (root == null) {
  8. return;
  9. }
  10. if (root.left != null) kthLargest(root.left, k);
  11. list.add(root.val);
  12. if (root.right != null) kthLargest(root.right, k);
  13. }