按顺序遍历二叉树

时间:2016-11-18 18:22:05

标签: java binary-tree

我正在学习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)
   }
}

1 个答案:

答案 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类或任何内容上输入任何信息。