翻转二叉树

翻转二叉树

问题

这个题目说的是,给你一棵二叉树,你要把它左右镜像翻转,然后返回翻转后的二叉树。

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

     1
   /   \
  2     4
       / \
      8  16

左右翻转后的二叉树是:

      1
    /   \
   4     2
  / \
 16  8

我们可以看到,二叉树上所有节点都沿中轴线左右互换了位置

代码

public class AlgoCasts {

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

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

  // Time: O(n), Space: O(n)
  public TreeNode invertBinaryTreeRecursive(TreeNode root) {
    if (root == null) return root;
    TreeNode tmp = root.left;
    root.left = root.right;
    root.right = tmp;
    invertBinaryTreeRecursive(root.left);
    invertBinaryTreeRecursive(root.right);
    return root;
  }

  // Time: O(n), Space: O(n)
  public  TreeNode invertBinaryTreeIterative(TreeNode root) {
    if (root == null) return root;
    Queue<TreeNode> q = new LinkedList<>();
    q.add(root);

    while (!q.isEmpty()) {
      TreeNode node = q.poll();
      TreeNode tmp = node.left;
      node.left = node.right;
      node.right = tmp;
      if (node.left != null) q.add(node.left);
      if (node.right != null) q.add(node.right);
    }
    return root;
  }

}

  转载请注明: ForwardXu 翻转二叉树

 上一篇
合并两个有序链表 合并两个有序链表
合并两个有序链表问题 这个题目说的是,给你两个递增排序的链表,你要把它们合成一个链表,并且保持递增排序。另外要求,新链表上的节点使用的就是旧的两个链表上的节点,不能创建新节点。 比如说,给你的两个链表 L1 和 L2,分别是: L1: 1
2018-12-12
下一篇 
二叉树中序遍历 二叉树中序遍历
二叉树中序遍历问题 这个题目说的是,给你一个二叉树,你要返回一个数组,表示二叉树中序遍历的结果。 比如说,给你的二叉树是: 1 / \ 2 3 \ 4 / 5 你要返回的中序遍历结
2018-12-12
  目录