- Given a binary tree, convert a tree into mirror binary tree using depth first search or recursive algorithm.
- Create symmetric (or mirror image) binary tree using post order traversal..
Examples – Convert binary tree to mirror or symmetric tree (recursive)
Example 1: Mirror binary tree having right child in java
- Given a binary tree having left child node only (refer Fig 2).
- Node C is left child of Node A.
- Mirror binary tree, will have right child node only.
- Node C become right child of Node A.
Example 2: Symmetric binary tree having left child (recursive)
- Given a binary tree having right child node only (refer Fig 3).
- Node C is right child of Node A.
- Symmetric binary tree, will have left child node only.
- Node C become left child of Node A.
Example 3: image binary tree having left & right child (recursive).
- Given a binary tree having left & right child node (refer Fig 4).
- Node B is left child of Node A.
- Node C is right child of Node A.
- Mirror binary tree, will have left & right nodes swapped.
- Node B becomes right child of Node A.
- Node C becomes left child of Node A.
Algorithm: convert binary tree into mirror binary tree in java
- Perform post order traversal of given binary tree (Root node A).
- Traverse left subtree i.e. Node B
- Traverse left subtree i.e. Node D
- Swap left (null) & right child (null) node.
- Swap will have no impact & return from here.
- Traverse right subtree i.e Node E
- Swap child nodes & return
- Swap left child (D) & right child (E)
- Traverse left subtree i.e. Node D
- Traverse right subtree i.e. Node C
- Traverse left subtree left i.e. Node F
- Swap child nodes & return
- Post order traversal for right child G
- Swap child nodes & return
- Swap left child (F) and right child (G)
- Traverse left subtree left i.e. Node F
- Swap left (B) and right child (C)
- We have successfully generated the mirror binary tree.
Time complexity of algorithm will be O(n).
Program – convert binary tree to mirror or image or symmetric tree in java
1.) MirrorTree Class:
- MirrorTree class is responsible for converting binary tree to symmetric binary tree.
- Traverse the binary trees using depth first search recursive algorithm.
package org.learn.Question; import java.util.LinkedList; import java.util.Queue; public class MirrorTree { public static void mirrorTree(Node root) { if(null == root) { return; } mirrorTree(root.left); mirrorTree(root.right); Node swapNode = root.left; root.left = root.right; root.right = swapNode; return; } public static void printTree(Node root) { if (root == null) { System.out.println("Tree is empty"); return ; } Queue queue = new LinkedList(); queue.offer(root); while (!queue.isEmpty()) { Node node = queue.poll(); System.out.printf(" %d",node.data); if (node.left != null) { queue.offer(node.left); } if (node.right != null) { queue.offer(node.right); } } System.out.println(""); return; } }
2.) Node Class:
- Node class is representing the nodes of a binary tree.
package org.learn.Question; public class Node { public int data; public Node left; public Node right; public Node(int num) { this.data = num; this.left = null; this.right = null; } public Node() { this.left = null; this.right = null; } public static Node createNode(int number) { return new Node(number); } }
3.) App Class:
- We are creating a binary tree in main method.
- We are calling method of MirrorTree class to convert binary tree into mirror binary tree.
- We will print the binary trees using level order traversal.
package org.learn.Client; import org.learn.Question.MirrorTree; import org.learn.Question.Node; public class App { public static void main(String[] args) { // root level 0 Node A = Node.createNode(55); // Level 1 Node B = Node.createNode(50); Node C = Node.createNode(40); // Level 2 Node D = Node.createNode(25); Node E = Node.createNode(80); Node F = Node.createNode(45); Node G = Node.createNode(90); // connect Level 0 and 1 A.left = B; A.right = C; // connect level 1 and level 2 B.left = D; B.right = E; C.left = F; C.right = G; System.out.println("Binary Tree"); MirrorTree.printTree(A); MirrorTree.mirrorTree(A); System.out.println("Mirror Binary Tree"); MirrorTree.printTree(A); } }
Output – mirror or Symmetric binary tree in java (Fig 5):
Binary Tree : 55 50 40 25 80 45 90 Mirror Binary Tree : 55 40 50 90 45 80 25
Download code – convert mirror image of binary tree (recursive)