二叉树前序遍历

二叉树前序遍历

问题

这个题目说的是,给你一个二叉树,你要返回一个数组,表示二叉树前序遍历的结果。

比如说,给你的二叉树是:

    1
   / \
  2   3
   \
    4
   /
  5

你要返回的前序遍历结果是:

1, 2, 4, 5, 3

代码

public class AlgoCasts {

  public class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int x) {
      val = x;
    }
  }

  private void preorder(TreeNode root, List<Integer> result) {
    if (root == null) return;
    result.add(root.val);
    preorder(root.left, result);
    preorder(root.right, result);
  }

  // Time: O(n), Space: O(n)
  public List<Integer> preorderTraversalRecursive(TreeNode root) {
    List<Integer> result = new ArrayList<>();
    preorder(root, result);
    return result;
  }

  // Time: O(n), Space: O(n)
  public List<Integer> preorderTraversalIterative(TreeNode root) {
    List<Integer> result = new ArrayList<>();
    Stack<TreeNode> stack = new Stack<>();

    while (root != null || !stack.isEmpty()) {
      while (root != null) {
        result.add(root.val);
        stack.push(root);
        root = root.left;
      }
      root = stack.pop().right;
    }
    return result;
  }

  // Time: O(n), Space: O(n)
  public List<Integer> preorderTraversalIterative2(TreeNode root) {
    List<Integer> result = new ArrayList<>();
    if (root == null) return result;
    Stack<TreeNode> stack = new Stack<>();
    stack.push(root);

    while (!stack.isEmpty()) {
      TreeNode node = stack.pop();
      result.add(node.val);
      if (node.right != null) stack.push(node.right);
      if (node.left != null) stack.push(node.left);
    }
    return result;
  }

}

  转载请注明: ForwardXu 二叉树前序遍历

 上一篇
合并二叉树 合并二叉树
合并二叉树问题 这个题目说的是,给你两棵二叉树,你要把它们合并起来形成一棵新的二叉树。合并规则是对应节点上的数字相加得到新节点的数字,如果有一个节点为空,则直接使用非空节点的数字,如果两个节点都为空,则合并后也为空。 比如说,给你的两棵二叉
2018-12-28
下一篇 
判断二叉树是否平衡 判断二叉树是否平衡
判断二叉树是否平衡问题 这个题目说的是,给你一棵二叉树,你要判断它是否平衡。这里平衡指的是,对于树上任意一个节点,它的两棵子树的高度差不能大于 1。 比如说,给你的二叉树是: 1 / \ 2 4
2018-12-28
  目录