1. 非遞歸實現二叉樹的前序遍歷
- Binary Tree Preorder Traversal (Medium)
public List<Integer> preorderTraversal(TreeNode root) { List<Integer> ret = new ArrayList<>(); Stack<TreeNode> stack = new Stack<>(); stack.push(root); while (!stack.isEmpty()) { TreeNode node = stack.pop(); if (node == null) continue; ret.add(node.val); stack.push(node.right); // 先右後左,保證左子樹先遍歷 stack.push(node.left); } return ret; }Copy to clipboardErrorCopied
2. 非遞歸實現二叉樹的後序遍歷
- Binary Tree Postorder Traversal (Medium)
前序遍歷爲 root -> left -> right,後序遍歷爲 left -> right -> root。能夠修改前序遍歷成爲 root -> right -> left,那麼這個順序就和後序遍歷正好相反。post
public List<Integer> postorderTraversal(TreeNode root) { List<Integer> ret = new ArrayList<>(); Stack<TreeNode> stack = new Stack<>(); stack.push(root); while (!stack.isEmpty()) { TreeNode node = stack.pop(); if (node == null) continue; ret.add(node.val); stack.push(node.left); stack.push(node.right); } Collections.reverse(ret); return ret; }Copy to clipboardErrorCopied
3. 非遞歸實現二叉樹的中序遍歷
- Binary Tree Inorder Traversal (Medium)
public List<Integer> inorderTraversal(TreeNode root) { List<Integer> ret = new ArrayList<>(); if (root == null) return ret; Stack<TreeNode> stack = new Stack<>(); TreeNode cur = root; while (cur != null || !stack.isEmpty()) { while (cur != null) { stack.push(cur); cur = cur.left; } TreeNode node = stack.pop(); ret.add(node.val); cur = node.right; } return ret; }