剑指 Offer 54. 二叉搜索树的第k大节点
给定一棵二叉搜索树,请找出其中第k大的节点。
知识点补充:
二叉搜索树即二叉排序树,是指左子树俊小于根节点,右子树均大于根节点,
遍历顺序 中序遍历(左根右)升序
所以右根左就是降序,第几大就是第几个数字
class TreeNode{
int val;
TreeNode left;
TreeNode right;
TreeNode(int x){
val = x;
}
}
int k, res;
public int missingNumber(TreeNode root,int k) {
this.k = k;
dfs(root);
return res;
}
void dfs (TreeNode root){
if(root == null) return;;
dfs(root.right);
//提前返回: 若 k = 0 ,代表已找到目标节点,无需继续遍历,因此直接返回;
if(k == 0) return;
if(--k == 0) res = root.val;
//记录结果: 若 k = 0代表当前节点为第 k大的节点,因此记录 res=root.val ;
dfs(root.left);
}