How to Mirror a Binary Tree?

  • 时间:2020-10-12 15:56:23
  • 分类:网络文摘
  • 阅读:211 次

Given a binary tree like this:

 
    	    8
    	   /  \
    	  6   10
    	 / \  / \
    	5  7 9 11

Your task is to mirror it which becomes this:

    	    8
    	   /  \
    	  10   6
    	 / \  / \
    	11 9 7  5

The most elegant algorithm to mirror a binary tree is using recursion. We can recursively mirror left and right trees respectively and then swap the left and right trees.

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Solution {
    public void Mirror(TreeNode root) {
        if (root == null) return;
        // make left tree also a mirror recursively
        Mirror(root.left);
        // make right tree also a mirror tree.
        Mirror(root.right);
        // swap left and right trees
        TreeNode t = root.left;
        root.left = root.right;
        root.right = t;        
    }
}
public class Solution {
    public void Mirror(TreeNode root) {
        if (root == null) return;
        // make left tree also a mirror recursively
        Mirror(root.left);
        // make right tree also a mirror tree.
        Mirror(root.right);
        // swap left and right trees
        TreeNode t = root.left;
        root.left = root.right;
        root.right = t;        
    }
}

The time complexity is O(N) where each node will be visited constant time, and the space complexity through calling stacks via recursion is O(N)=O(h) which is the height of the tree.

It is said that this is one of the Google’s interview question, a simple one though.

–EOF (The Ultimate Computing & Technology Blog) —

推荐阅读:
How to Find the Largest Unique Number in Array (C++)?  How to Find the K-diff Pairs in an Array with Two Pointer or Has  String Algorithm: Reverse the first k characters for every 2k ch  How to Generate Parentheses using Bruteforce or Depth First Sear  Algorithm to Construct Binary Tree from Preorder and Inorder Tra  The 24 Game Algorithm using Depth First Search  How to Count the Path Sum from a Binary Tree using Depth First S  How to Multiply Two Matrices in C++?  How to Compute the Number of Equivalent Domino Pairs?  Stay In The Loop: Google Will Make Sure You Never Miss A Mention 
评论列表
添加评论