题目描述:
给定一棵二叉搜索树,请找出其中第k大的节点。
题目来源于LeetCode:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-di-kda-jie-dian-lcof/
解题思路
二叉搜索树中序遍历:左 中 右,得到递增数列。
二叉搜索树逆序中序遍历:右 中 左,得到递减数列。
进行逆序中序遍历之后让k递减,直到k为0说明找到了第k大的结点,返回即可。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
int target, k;
public int kthLargest(TreeNode root, int k) {
this.k = k;
reverseInorder(root);
return target;
}
public void reverseInorder(TreeNode root) {
if (root == null) return;
reverseInorder(root.right);
if (--k == 0) {
target = root.val;
return;
}
reverseInorder(root.left);
}
}