Here I summarize the iterative implementation for preorder, inorder, and postorder traverse.
PreOrder model
|
|
Inorder model
|
|
144.Pre Order Traverse
Recursive
|
|
Running time: O(n), 1ms
Iterative
|
|
Running time: O(n), 10ms
Stack Right node first, then left node
|
|
Running time: O(n), 2ms
94.In Order Traverse
Recursive
|
|
Running time: O(n), 1ms
Iterative
|
|
Running time: O(n), 2ms
145.Post Order Traverse
Using addFirst(Element e)
|
|
Using LastVisit node
|
|
后序遍历在决定是否可以输出当前节点的值的时候,需要考虑其左右子树是否都已经遍历完成。
所以需要设置一个lastVisit游标。
若lastVisit等于当前考查节点的右子树,表示该节点的左右子树都已经遍历完成,则可以输出当前节点。
并把lastVisit节点设置成当前节点,将当前游标节点node设置为空,下一轮就可以访问栈顶元素。
102.Level Order Traversal
Iterative
|
|
Time complexity: O(n), 2ms
Recursive
|
|
Time complexity: O(n), 1ms