题目描述

求给定的二叉树的前序遍历。
例如:
给定的二叉树为{1,#,2,3},
1↵ ↵ 2↵ /↵ 3↵
返回:[1,2,3].
备注;用递归来解这道题太没有新意了,可以给出迭代的解法么?

代码

思想
前序遍历的非递归

  1. public ArrayList<Integer> preorderTraversal (TreeNode root) {
  2. ArrayList<Integer> list = new ArrayList<Integer>();
  3. if(root==null)return list;
  4. Stack<TreeNode> stack = new Stack<TreeNode>();
  5. while(root!=null||!stack.isEmpty()) {
  6. while(root!=null) {
  7. stack.push(root);
  8. list.add(root.val);
  9. root = root.left;
  10. }
  11. if(!stack.isEmpty()) {
  12. root = stack.pop();
  13. root = root.right;
  14. }
  15. }
  16. return list;
  17. }