我想在非二叉树中搜索一个项目(任何节点都可以有n个子节点)并立即退出递归.有问题的节点可以是任何节点,而不仅仅是叶子.
这是我的代码,但我没有得到完整的搜索.
private nNode recursiveSearch(data gi,nNode node){
if (node.getdata()==gi)
return node;
nNode[] children = node.getChildren();
if (children.length>0)
for (int i = 0; i < children.length; i++) {
return recursiveSearch(gi, children[i]);
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
nNode包含:
ArrayList mChildren ;(它的孩子)
和数据对象.
das*_*ght 27
探索第一个孩子后你不应该退出.您不需要循环if前面的语句for.
private nNode recursiveSearch(data gi,nNode node){
if (node.getdata()==gi)
return node;
nNode[] children = node.getChildren();
nNode res = null;
for (int i = 0; res == null && i < children.length; i++) {
res = recursiveSearch(gi, children[i]);
}
return res;
}
Run Code Online (Sandbox Code Playgroud)
在你的代码中,如果recursiveSearch(gi,children [i])返回null然后i + 1没有被搜索,修改:
private nNode recursiveSearch(data gi,nNode node){
if (node.getdata()==gi)
return node;
nNode[] children = node.getChildren();
nNode temp;
if (children.length>0)
for (int i = 0; i < children.length; i++) {
temp = recursiveSearch(gi, children[i]);
if(temp!=null)
return temp;
}
return null;
}
Run Code Online (Sandbox Code Playgroud)