Redian新闻
>
问题在哪儿啊 kth Node of BST,大家帮忙
avatar
h*o
2
看了好久没明白问题,为啥C++可以呢
public static void findKthNode(TreeNode root, int k){
if (root == null)
return ;

findKthNode(root.left, k);

k--;
System.out.println(k);
if (k == 0)
System.out.println(root.val);

findKthNode(root.right, k);
}
avatar
z*0
3
全靠忽悠啊
avatar
j*y
4
找到了 第 k个数以后应该就什么都不做了吧。

【在 h*********o 的大作中提到】
: 看了好久没明白问题,为啥C++可以呢
: public static void findKthNode(TreeNode root, int k){
: if (root == null)
: return ;
:
: findKthNode(root.left, k);
:
: k--;
: System.out.println(k);
: if (k == 0)

avatar
c*a
6
make k static, or global scope to the function
avatar
d*1
7
正版软件?
盗版的不怕病人升级发现?
avatar
c*a
8
or
i think this will work
public static void findKthNode(TreeNode root, int k){
if (root == null)
return ;
findKthNode(root.left, k-1);
System.out.println(k);
if (k == 0)
System.out.println(root.val);
findKthNode(root.right, k-1);
}
avatar
m*a
9
估计是学校里面的

【在 d*****1 的大作中提到】
: 正版软件?
: 盗版的不怕病人升级发现?

avatar
f*t
10
k要传引用,不是值
avatar
h*o
11
globle 可能可以,这样子也不行的。

【在 c*****a 的大作中提到】
: or
: i think this will work
: public static void findKthNode(TreeNode root, int k){
: if (root == null)
: return ;
: findKthNode(root.left, k-1);
: System.out.println(k);
: if (k == 0)
: System.out.println(root.val);
: findKthNode(root.right, k-1);

avatar
h*o
12
嗯, 应该是的, 那在java中这个参数应该怎么传?

【在 f*******t 的大作中提到】
: k要传引用,不是值
avatar
f*t
13
用class variable

【在 h*********o 的大作中提到】
: 嗯, 应该是的, 那在java中这个参数应该怎么传?
avatar
c*a
14
能跑啊,我试了一下,把那多余的system.out.print去掉就只显示kth了

【在 h*********o 的大作中提到】
: globle 可能可以,这样子也不行的。
avatar
h*o
15
这么麻烦啊.....
那类似鱼这种方法中的参数,都需要重新定义class啊。。

【在 f*******t 的大作中提到】
: 用class variable
avatar
h*o
16
java?我怎么试了下,不能跑啊。。

【在 c*****a 的大作中提到】
: 能跑啊,我试了一下,把那多余的system.out.print去掉就只显示kth了
avatar
d*g
17
要传递引用的话貌似可以用int[] k = new int[1]:
public void findKthNode(TreeNode root, int[] k){
if (root == null) return ;
findKthNode(root.left, k);
k[0]--;
if (k[0] == 0)
System.out.println(root.val);
findKthNode(root.right, k);
}
或者可以加一个返回值(现写的,没测过,大家看看对不对):
public int findKthNode(TreeNode root, int k)
{
if(root == null) return k;

int leftK = findKthNode(root.left, k);
--leftK;
if(leftK == 0)
System.out.println(root.val);
int rightK = findKthNode(root.right, leftK);
return rightK;
}
avatar
h*o
18
嗯 这个方法不错。~~

【在 d*********g 的大作中提到】
: 要传递引用的话貌似可以用int[] k = new int[1]:
: public void findKthNode(TreeNode root, int[] k){
: if (root == null) return ;
: findKthNode(root.left, k);
: k[0]--;
: if (k[0] == 0)
: System.out.println(root.val);
: findKthNode(root.right, k);
: }
: 或者可以加一个返回值(现写的,没测过,大家看看对不对):

avatar
c*i
19
c++可以, 应该是用了reference吧~
java里可以写个wrapper class, 包上一个int 变量~~
avatar
b*g
20
很多树里面遍历、查找、比较的题都能用这个思路
大意就是递归里面传引用
至于具体传的参数,可是是本题一样的一个用于计数的int,也可以是一个指向tree/
node的指针(例如在binary tree里找最大BST)
总之要传引用才行
如果传的是int,那一定要有该参数的数值的改变操作:
可以在函数里加一句i++之类的
也可以在函数递归调用时把i++当做参数传进去

【在 h*********o 的大作中提到】
: 看了好久没明白问题,为啥C++可以呢
: public static void findKthNode(TreeNode root, int k){
: if (root == null)
: return ;
:
: findKthNode(root.left, k);
:
: k--;
: System.out.println(k);
: if (k == 0)

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。