How to Mirror a Binary Tree?

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

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) —

推荐阅读:
海南卫视直播-海南卫视在线直播观看「高清」  青海卫视直播-青海卫视在线直播观看「高清」  西藏卫视直播-西藏卫视在线直播观看「高清」  青海安多卫视直播-青海安多藏语卫视直播「高清」  兵团卫视直播-兵团卫视在线直播观看「高清」  延边卫视直播-延边卫视在线直播观看「高清」  海峡卫视直播-海峡卫视在线直播观看「高清」  新疆卫视直播-新疆卫视在线直播观看「高清」  康巴卫视直播-康巴卫视在线直播观看「高清」  三沙卫视直播-三沙卫视在线直播观看「高清」 
评论列表
添加评论