我正在学习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 :(得分: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类或任何内容上输入任何信息。