【发布时间】:2015-04-09 15:39:11
【问题描述】:
我的树节点有 3 个字符串字段和 3 个节点字段,分别是左、中和右。
其中一个问题是该方法只能以字符串为参数
这就是我所拥有的
public TreeNode findNode(String name) {
TreeNode pointer = this.getRoot();
if (pointer.getName().equals(name))
return pointer;
if (pointer.getLeft() != null)
pointer = pointer.getLeft();
findNode(name);
if (pointer.getMiddle() != null)
pointer = pointer.getMiddle();
findNode(name);
if (pointer.getRight() != null)
pointer = pointer.getRight();
findNode(name);
return null;
}
这会导致堆栈溢出错误,因为我只是将指针设置为根。但我必须从某个地方开始,该方法的唯一参数可以是名称。我似乎无法看到如何做到这一点。
【问题讨论】:
-
难道你的方法体应该有更多的返回语句?你看,你递归地调用你的 find 方法;然后忽略它的结果;并且总是返回null?顺便说一句:你想把 { } 放在任何块周围(所以,总是对 if/then/else、for 循环、while 循环等执行此操作)。
-
好吧,如果我找到同名的节点,我会返回指针。这还不够吗?
-
再次:如果您的递归调用之一“找到”正确的节点并返回它;该递归调用的结果是未使用。含义:在一个地方返回值无济于事;当你忽略上一层返回的结果时!