Tree traversal: Preorder traversal non-recursion
可以這樣想:希望在非遞迴的每個回合裡, stack頂會是 root,取完值之後把 root 的右子樹丟進 stack
再丟左子樹,這樣下一回合時 stack 頂才會是剛剛的左子樹。
public void preorderTraversal(TreeNode root) {
if (root == null) {
return;
}
Stack<TreeNode> s = new Stack<TreeNode>();
s.push(root);
while (!s.isEmpty()) {
TreeNode node = s.pop();
System.out.print(node.val + " ");
if (node.right != null) { //
s.push(node.right);
}
// 我们需要先压入右节点,再压入左节点,这样就可以先弹出左节点。
if (node.left != null) {
s.push(node.left);
}
}
}