首页 新闻 会员 周边

求助大神看看

0
悬赏园豆:30 [已解决问题] 解决于 2019-07-19 22:35

public TreeNode FrontFind(int i) {
// TODO Auto-generated method stub
TreeNode target = null ;
if(this.value == i) {
return this;
}
else {
if(LeftNode != null) {
target = LeftNode.FrontFind(i);
}
if(target != null) {
return target;
}
这是利用树的前序遍历查找某个值,为什么在查找到之后,理应return this 直接返回的,为什么还要将this 赋给 target再返回,表示看不懂。

sceon的主页 sceon | 初学一级 | 园豆:34
提问于:2018-11-12 22:12
< >
分享
最佳答案
0

楼主是不是发错了,为什么没有在右子树里里查?另外,楼主说的树应该是二叉树吧。最后:我怎么没看见有把this赋值给target 的表达式,return this 和 return target当然不一样

收获园豆:30
会长 | 专家六级 |园豆:12401 | 2018-11-13 09:33

没有发全部的,只是我在这块看不懂,比如不用在右子树查找就找到了,是怎样赋值的,没有把this 赋值给target 的表达式,可能因为这是递归吧,我对递归一直搞不懂

sceon | 园豆:34 (初学一级) | 2018-11-13 10:02
其他回答(2)
0

这个下面不还有判断呢吗,如果查出来的这个值非null才返回

番茄先生 | 园豆:911 (小虾三级) | 2018-11-13 08:50

但是不是return 了吗,直接跳出这个方法了吗

支持(0) 反对(0) sceon | 园豆:34 (初学一级) | 2018-11-13 09:05

@sceon: LeftNode.FrontFind(i)查出来的就是TreeNode 对象,结合业务场景考虑返回的这个对象

支持(0) 反对(0) 番茄先生 | 园豆:911 (小虾三级) | 2018-11-13 09:23

@番茄先生 那您的意思就是这次会把this返回给target ?

支持(0) 反对(0) sceon | 园豆:34 (初学一级) | 2018-11-13 09:25
0

这个方法是前序遍历查找???

让我发会呆 | 园豆:2929 (老鸟四级) | 2018-11-13 09:11

对啊,代码没截全部

支持(0) 反对(0) sceon | 园豆:34 (初学一级) | 2018-11-13 09:12

@sceon: 好吧,那你疑问的是什么呢?
if(target != null) {
return target;
}
这段代码?因为在else里LeftNode已经递归调用相同方法了,可能查到要的结果了,这时target就有值了,所有这块就直接返回。

支持(0) 反对(0) 让我发会呆 | 园豆:2929 (老鸟四级) | 2018-11-13 09:18

@让我发会呆 我疑惑的是如果已经查到值了,会直接return this 这时target 不是为null吗,为何还要通过下面的target 判断

支持(0) 反对(0) sceon | 园豆:34 (初学一级) | 2018-11-13 09:24

@sceon: 应该是因为递归调用的原因吧,每当方法重复调用一次,this的含义就变了,就像这段代码
if(LeftNode != null) {
target = LeftNode.FrontFind(i);
},
你总不能这么写吧
if(LeftNode != null) {
this = LeftNode.FrontFind(i);
}

支持(0) 反对(0) 让我发会呆 | 园豆:2929 (老鸟四级) | 2018-11-13 09:30

就是不懂递归,如果是第二次就查找到了,应该就返回到第一次递归,那意思就是把这个this赋值给了target

支持(0) 反对(0) sceon | 园豆:34 (初学一级) | 2018-11-13 10:10

@sceon: 是的,就相当于第二次的这块
if(this.value == i) {
return this;
} 就给到这儿了target = LeftNode.FrontFind(i);

支持(0) 反对(0) 让我发会呆 | 园豆:2929 (老鸟四级) | 2018-11-13 10:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册