二叉树中序遍历

二叉树中序遍历

问题

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

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

     1
   /   \
  2     3
   \
    4
   /
  5

你要返回的中序遍历结果是:2, 5, 4, 1, 3

代码

public class AlgoCasts {

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

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

  // Time: O(n). Space: O(n)
  public List<Integer> inorderTraversalRecursive(TreeNode root) {
    if (root == null) return new ArrayList<>();

    List<Integer> left = inorderTraversalRecursive(root.left);
    List<Integer> right = inorderTraversalRecursive(root.right);
    left.add(root.val);
    left.addAll(right);
    return left;
  }

  // Time: O(n). Space: O(n)
  public List<Integer> inorderTraversalIterative(TreeNode root) {
    Stack<TreeNode> s = new Stack<>();
    List<Integer> result = new ArrayList<>();

    while (root != null || !s.empty()) {
      while (root != null) {
        s.push(root);
        root = root.left;
      }
      root = s.pop();
      result.add(root.val);
      root = root.right;
    }

    return result;
  }

}

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

 上一篇
翻转二叉树 翻转二叉树
翻转二叉树问题 这个题目说的是,给你一棵二叉树,你要把它左右镜像翻转,然后返回翻转后的二叉树。 比如说,给你的二叉树是: 1 / \ 2 4 / \ 8 16 左右翻转后的二叉
2018-12-12
下一篇 
合并两个有序数组 合并两个有序数组
合并两个有序数组问题 这个题目说的是,给你两个递增排序的数组,你要把第二个数组合并到第一个,并使其仍然保持递增排序。两个数组中的元素个数会显式地给出,并且第一个数组的大小可以容纳下两个数组中所有的元素。 比如说给你的两个数组是: 2, 4
2018-12-12
  目录