题目描述
给定一棵二叉搜索树,请找出其中第k大的节点。
示例 1:
输入: root = [3,1,4,null,2], k = 1
3
/ \
1 4
\
2
输出: 4
示例 2:
输入: root = [5,3,6,2,4,null,null,1], k = 3
5
/ \
3 6
/ \
2 4
/
1
输出: 4
解题思路
要知道的一个概念,二叉搜索树的中序遍历是升序的,则要找到第k大的数字,则对二叉搜索树进行中序遍历,当遍历到第k个节点时,则停止,返回当前节点的值即可
class Solution_54_1 {
private int result;
private int k;
public int kthLargest(TreeNode root, int k) {
//二叉搜索树的中序遍历是升序的
this.k = k;
inorder(root);
return result;
}
private void inorder(TreeNode root) {
if (root == null){
return;
}
//遍历右子节点
inorder(root.right);
//计数,如果当前节点是第k个节点,则结果递归,记录当前节点的值
if (--this.k == 0){
this.result = root.val;
return; //直接返回避免无效的迭代
}
inorder(root.left);
}
}