package tree; import java.util.LinkedList; import java.util.Queue; /* Write a Function to Convert a given Binary Tree into its Mirror Tree iteratively. (Mirror Tree: Mirror Tree of a binary tree is where left and right child of every node of given binary tree is interexchange.) Input: output: 50 50 / \ / \ / \ / \ 20 80 80 20 / \ / \ / \ / \ 10 30 70 100 100 70 30 10 */ public class MirrorOfBinaryTreeInIterativeWay { private Node rootNode; public static void main(String[] args) { new MirrorOfBinaryTreeInIterativeWay(); } public MirrorOfBinaryTreeInIterativeWay(){ addNode(rootNode, 50); addNode(rootNode, 20); addNode(rootNode, 80); addNode(rootNode, 10); addNode(rootNode, 30); addNode(rootNode, 70); addNode(rootNode, 100); printTreeLevelOrder(rootNode); Node mirrorRoot = createMirrorIteratively(rootNode); System.out.println(); printTreeLevelOrder(mirrorRoot); } private Node createMirrorIteratively(Node rootNode) { if(rootNode==null){ return null; } Queue<Node> q = new LinkedList<Node>(); q.add(rootNode); while(!q.isEmpty()){ Node temp = q.poll(); Node swapTemp = temp.getLeft(); temp.setLeft(temp.getRight()); temp.setRight(swapTemp); if(temp.getLeft()!=null){ q.add(temp.getLeft()); } if(temp.getRight()!=null){ q.add(temp.getRight()); } } return rootNode; } private void printTreeLevelOrder(Node rootNode){ if(rootNode==null) return; Queue<Node> queue = new LinkedList<Node>(); queue.add(rootNode); while(!queue.isEmpty()){ Node obj = (Node)queue.poll(); System.out.print(obj.getData() + " "); if(obj.getLeft()!=null) queue.add(obj.getLeft()); if(obj.getRight()!=null) queue.add(obj.getRight()); } } private void addNode(Node rootNode, int data){ if(rootNode==null){ Node temp1 = new Node(data); this.rootNode=temp1; }else{ addNodeInProperPlace(rootNode, data); } } private void addNodeInProperPlace(Node rootNode, int data){ if(data>rootNode.getData()){ if(rootNode.getRight()!=null){ addNode(rootNode.getRight(), data); }else{ Node temp1 = new Node(data); rootNode.setRight(temp1); } }else if(data<rootNode.getData()){ if(rootNode.getLeft()!=null){ addNode(rootNode.getLeft(), data); }else{ Node temp1 = new Node(data); rootNode.setLeft(temp1); } } } }
Questions on Stack, Queues, Linkedlist, Binary Trees, Sorting, Searching, Graphs etc with solution using Java Language.
Friday, 26 June 2015
Given a Binary Tree or a Binary Search Tree, Convert it into its Mirror Tree iteratively.
Labels:
Binary Search Tree,
Binary Tree