递归搜索非二叉树中的节点

omr*_*rid 9 java tree search

我想在非二叉树中搜索一个项目(任何节点都可以有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)


Rez*_*eni 6

在你的代码中,如果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)