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再返回,表示看不懂。
楼主是不是发错了,为什么没有在右子树里里查?另外,楼主说的树应该是二叉树吧。最后:我怎么没看见有把this赋值给target 的表达式,return this 和 return target当然不一样
没有发全部的,只是我在这块看不懂,比如不用在右子树查找就找到了,是怎样赋值的,没有把this 赋值给target 的表达式,可能因为这是递归吧,我对递归一直搞不懂
这个下面不还有判断呢吗,如果查出来的这个值非null才返回
但是不是return 了吗,直接跳出这个方法了吗
@sceon: LeftNode.FrontFind(i)查出来的就是TreeNode 对象,结合业务场景考虑返回的这个对象
@番茄先生 那您的意思就是这次会把this返回给target ?
这个方法是前序遍历查找???
对啊,代码没截全部
@sceon: 好吧,那你疑问的是什么呢?
if(target != null) {
return target;
}
这段代码?因为在else里LeftNode已经递归调用相同方法了,可能查到要的结果了,这时target就有值了,所有这块就直接返回。
@让我发会呆 我疑惑的是如果已经查到值了,会直接return this 这时target 不是为null吗,为何还要通过下面的target 判断
@sceon: 应该是因为递归调用的原因吧,每当方法重复调用一次,this的含义就变了,就像这段代码
if(LeftNode != null) {
target = LeftNode.FrontFind(i);
},
你总不能这么写吧
if(LeftNode != null) {
this = LeftNode.FrontFind(i);
}
就是不懂递归,如果是第二次就查找到了,应该就返回到第一次递归,那意思就是把这个this赋值给了target
@sceon: 是的,就相当于第二次的这块
if(this.value == i) {
return this;
} 就给到这儿了target = LeftNode.FrontFind(i);