AcWing 70. Java 简洁版-二叉搜索树的第k个
原题链接
简单
作者:
神经蛙_3
,
2020-04-18 21:35:06
,
所有人可见
,
阅读 689
二叉搜索树的第k个结点 Java 简洁版^^
class Solution {
// 传递参数k时的复制传递,每次进入递归后都使用复制那份,并作用域只在进入递归函数内,返回后参数还是传入的那个值,没有发生改变
// 改用数组对象传引用,Integer对象缓存中-128,127还是复制传递!
public TreeNode kthNode(TreeNode root, int k) {
return dfs(root,new int[]{k});
}
TreeNode dfs(TreeNode r,int[] k){
if(r==null || k[0]<0) return null;
TreeNode n = dfs(r.left,k);
// 左子树找到,不需要再去右子树找,直接向上返回
if(n!=null) return n;
// 去掉当前root
k[0]--;
if(k[0]==0) return r;
// 都没有去右子树找
return dfs(r.right,k);
}
class Solution {
TreeNode res = null;
public TreeNode kthNode(TreeNode root, int k) {
dfs(root,new int[]{k});
return res;
}
void dfs(TreeNode r,int[] k){
if(r==null || k[0]<0) return ;
dfs(r.left,k);
k[0]--;
if(k[0]==0) {res = r;return;};
dfs(r.right,k);
}
}