2016-11-18 131 views
-1

我正在学习java。我在某处看到了这个代码。 以下代码是否正确地遍历它?结果列表是否被正确调用?它会正确追加吗?为了遍历二叉树

public void traverse(Node<T> input, List<T> resultlist) { 
    if (input != null) { 
     traverse(input.getLeftNode(), resultlist) 

     resultlist.add(input.getValue()) 

     traverse(input.getRightNode(), resultlist) 
    } 
} 
+0

在中间线上,我认为'result'应该是'resultlist'。 – nvioli

+1

[二叉树的有序迭代器]的可能重复(http://stackoverflow.com/questions/12850889/in-order-iterator-for-binary-tree) – rbucinell

+0

请增加关于节点类的更多细节 –

回答

1

通过询问是否它做一个中序遍历(这是否做它应该做的),我猜你只是不明白遍历之间的区别...

底漆:

为了真正理解这一点,你需要了解数据结构的一个重要方面:递归。这是你需要掌握的东西。这可能需要一些,并尝试不同的练习后,它只会点击。

下面是该上手的资源:

http://www.programmerinterview.com/index.php/recursion/explanation-of-recursion/

现在来到你的树遍历的问题,典型的约定如下:

预购:

traversalFunction(Node) 
    doStuffWithNode(Node) //prechild traversal 
    traversalFunction(Node.left) 
    traversalFunction(Node.right) 

按序

traversalFunction(Node) 
    traversalFunction(Node.left) 
    doStuffWithNode(Node) //within child traversal 
    traversalFunction(Node.right) 

后订购:

traversalFunction(Node) 
    traversalFunction(Node.left) 
    traversalFunction(Node.right) 
    doStuffWithNode(Node) //post child traversal 

因此,要回答你的问题......如果你有一个在左,与执行节点上的操作方法右遍历然后是的它是一个有序的遍历。这就是你正在做的。

您在这里可以找到的遍历的更多信息: https://en.wikipedia.org/wiki/Tree_traversal

现在为你的代码的其余部分的正确性,我不能确定,因为你真的没有输入您的Node类或任何的任何信息。