public void iterativePreorder(Node root) {
Stack nodes = new Stack();
nodes.push(root);
Node currentNode;
while (!nodes.isEmpty()) {
currentNode = nodes.pop();
Node right = currentNode.right();
if (right != null) {
nodes.push(right);
}
Node left = currentNode.left();
if (left != null) {
nodes.push(left);
}
System.out.println("Node data: "+currentNode.data);
}
}
Run Code Online (Sandbox Code Playgroud)
资料来源:Wiki Tree Traversal
时间复杂度是O(n)吗?如果使用递归完成时间复杂性是否相同?
新问题:如果我使用上面的代码从TreeA中找到某个节点来创建另一个树TreeB,它将拥有与TreeA一样多的节点,那么创建TreeB的复杂性将是O(n ^ 2),因为它是n个节点和每个节点会使用上面的代码,即O(n)?
最近,当我需要迭代std::map我通常std::vector从地图构建一个时,因为访问元素的复杂性是(log N)(实际上,只有当我需要通过自定义键访问元素时).
因此,我最终维护了一个std::vectorfor for for iterating我的所有元素,(因为它的复杂性是常数O(1))和一个std::map特定的检索(因为它的复杂性在迭代时是O(log n)).
这是一个正确的方法,或者我应该去std::map和忘记std::vector(你知道,对于这个特定情况).
谢谢.