递归方法不能转换所有树节点

时间:2014-09-25 08:09:17

标签: java recursion

我有一个findNode方法,可以在treenode中找到目标字符串。我遇到的问题是我的递归方法似乎只是沿着树的一个分支而不是像我想的那样覆盖洞树。如果您需要更多代码,请询问。

public GeneralTreeNode findNode(String targetName) {
  // name is the current name of the node
  if(targetName.equals(this.name)) return this;
  // children is a HashSet of all the nodes children
  for(GeneralTreeNode child : children) return child.findNode(targetName);

  // no node containing the string could be found
  return null; 
}

3 个答案:

答案 0 :(得分:1)

你在循环中返回,因此它停止了。而不是总是返回,只有你找到的东西才会返回。

for(GeneralTreeNode child : children) {
   GeneralTreeNode result = child.findNode(targetName);
   if (result != null) {
        return result;
   }

}

答案 1 :(得分:0)

更改为此类chode:

public GeneralTreeNode findNode(String targetName) {

  // name is the current name of the node
  if(targetName.equals(this.name)) return this;

  // children is a HashSet of all the nodes children
  for(GeneralTreeNode child : children) { 
     GeneralTreeNode result = child.findNode(targetName);
     if (result != null) return result;
  }

  // no node containing the string could be found
  return null; 
}

这应该可以按你的意愿工作......

答案 2 :(得分:0)

在这一行

for(GeneralTreeNode child : children) return child.findNode(targetName);

您直接从第一个孩子返回结果。所以每个后来的孩子都不会被咨询。当第一个孩子也从第一个孩子返回结果时,你会发现你的方法只考虑一个分支。

解决方案是分析每个孩子的结果:

for(GeneralTreeNode child : children) {
    GeneralTreeNode result = child.findNode(targetName);
    if (result != null) return result;
}

现在它只返回结果,如果真的找到了节点。如果没有,循环继续。