【问题标题】:In order traversal binary tree [closed]为了遍历二叉树[关闭]
【发布时间】:2016-11-18 18:22:04
【问题描述】:

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

【问题讨论】:

  • 中间行,我觉得result应该是resultlist
  • 请添加更多关于节点类的细节
  • 谢谢。已更改为结果列表

标签: java binary-tree


【解决方案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 类或任何东西的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 2021-03-08
    • 2020-01-15
    相关资源
    最近更新 更多