Java递归迭代器与我自己的树

标签 java recursion

我有两段代码,在我看来它们做同样的事情,但事实并非如此。 我正在尝试为我的自定义集树创建一个迭代器。这是代码。

public LinkedList<AnyType> traverse (TheNode<AnyType> node,LinkedList<AnyType> theList){ 
    if (node.left != null)
        return traverse (node.left,theList);        
    theList.push(node.element);
    if (node.right != null)
        return traverse (node.right,theList);       

    return theList;

}

public void traverseNrTwo (TheNode<AnyType> node){ 
    if (node.left != null){
        traverseNrTwo (node.left);
    }
    list.push(node.element);
    if (node.right != null){
        traverseNrTwo (node.right);
    }
}

traverse 仅遍历树的左侧并将其添加到列表中,但 traveseNrTwo 会遍历整个树。所以,我的问题是,为什么他们要做两件不同的事情?

最佳答案

您不应返回递归调用的结果,因为它会导致递归仅访问树的左侧。

public LinkedList<AnyType> traverse (TheNode<AnyType> node,LinkedList<AnyType> theList){ 
    if (node.left != null)
        traverse (node.left,theList); // if you return traverse(node.left,theList) here,
                                      // you end the recursion without adding the current
                                      // node and visiting the right sub-tree 
    theList.push(node.element);
    if (node.right != null)
        traverse (node.right,theList);       

    return theList;   
}

另请注意,由于您正在传递 LinkedList<AnyType>作为方法的参数(即您没有在方法中创建新的 LinkedList 实例),您不必返回它。您只需将返回类型更改为 void .

关于Java递归迭代器与我自己的树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37110487/

相关文章:

java - 将 Jackjson JSON 对象从 JSP 传递到 JavaScript 函数

java - 使用 JavaMail API 通过 servlet 发送带有附件的电子邮件无法通过

Java:线程 "main"java.lang.NoClassDefFoundError 中出现异常:org/slf4j/LoggerFactory

java - 表达式树类中的递归evaluate()

java - 给定一个整数数组(长度为 n),使用 Java 中的递归查找并返回输入数组的所有子集

c - 合并排序中划分部分的无限循环

Java 泛型通配符类型不匹配

java - 如何使用java从数据库中检索日期

带有 Promise 的 Javascript 递归函数

ruby - 使用 Mechanize 检索网站的所有链接