递归搜索Java中的树

时间:2017-08-05 06:17:10

标签: java recursion tree

我有一个非二进制树,其节点按以下方式定义:

public class TreeNode{
private String label;
private TreeNode[] children;

public TreeNode(String label){
     this.label = label;
     children = new TreeNode[9]
}

因此每个节点都有一个标签和一个大小为9的数组,它包含9个子节点。 现在在我的树类中,我想定义一个find方法,它将找到一个具有特定标签的节点。这就是我能想到的:

public TreeNode find(String label, TreeNode node) {
    TreeNode result = null;
    if (node.getLabel().equals(label)) {
        return node;
    } else {
        if (node.hasChildren()){
            for (int i = 0; i< node.getChildren().length; i++){
                if (node.getChildren()[i].getLabel().equals(label)) {
                    result = node.getChildren()[i];
                    break;
                else
                    return find(label, node.getChildren()[i];
           }
    return result;
}

这个问题就是它每次都会更深入,而不会查看我提供给方法的“节点”的兄弟姐妹。

我确信解决方案是微不足道的,但我似乎无法抓住它。

有一个similar question here,我认为他们的问题也很相似,但我似乎无法将提供的解决方案转换为我的应用程序。

我错过了什么?谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

你不应该在return循环中使用for而不检查递归调用的返回值。此外,无条件地对循环中的所有项应用递归调用。

for (int i = 0; i < node.getChildren().length; i++){
    result = find(label, node.getChildren()[i];
    if(result != null) {
        return result;
    }
}