1+ package Lecture20 ;
2+
3+ import java .util .Scanner ;
4+
5+ public class mirrorBinaryTree {
6+
7+ private class Node {
8+ int data ;
9+ Node left ;
10+ Node right ;
11+
12+ Node (int data , Node left , Node right ) {
13+ this .data = data ;
14+ this .left = left ;
15+ this .right = right ;
16+ }
17+ }
18+
19+ private Node root ;
20+ private int size = 0 ;
21+
22+ public mirrorBinaryTree () {
23+ Scanner sc = new Scanner (System .in );
24+ this .root = takeTreeInput (sc , null , false );
25+ }
26+
27+ private Node takeTreeInput (Scanner sc , Node parent , boolean isLeftorRight ) {
28+ if (parent == null ) {
29+ System .out .print ("Enter data for root node: " );
30+ } else {
31+ if (isLeftorRight ) {
32+ System .out .print ("Enter data for left child of " + parent .data + ": " );
33+ } else {
34+ System .out .print ("Enter data for right child of: " + parent .data + ": " );
35+
36+ }
37+ }
38+
39+ int data = sc .nextInt ();
40+ Node node = new Node (data , null , null );
41+ this .size ++;
42+
43+ boolean choice = false ;
44+ System .out .print ("Do you have left child for " + node .data + " -> true/false: " );
45+ choice = sc .nextBoolean ();
46+ if (choice ) {
47+ node .left = this .takeTreeInput (sc , node , true );
48+ }
49+
50+ choice = false ;
51+ System .out .print ("Do you have right child for " + node .data + " -> true/false: " );
52+ choice = sc .nextBoolean ();
53+ if (choice ) {
54+ node .right = this .takeTreeInput (sc , node , false );
55+ }
56+
57+ return node ;
58+ }
59+
60+ public void display () {
61+ this .display (this .root );
62+ }
63+
64+ private void display (Node node ) {
65+ if (node .left != null ) {
66+ System .out .print (node .left .data + " => " );
67+ } else {
68+ System .out .print ("END => " );
69+ }
70+
71+ System .out .print (node .data );
72+
73+ if (node .right != null ) {
74+ System .out .print (" <= " + node .right .data );
75+ } else {
76+ System .out .print (" <= END" );
77+ }
78+ System .out .println ();
79+
80+ if (node .left != null ) {
81+ this .display (node .left );
82+ }
83+ if (node .right != null ) {
84+ this .display (node .right );
85+ }
86+ }
87+
88+ public void mirror () {
89+ this .mirror (this .root );
90+ }
91+
92+ private void mirror (Node node ) {
93+ if (node == null ) {
94+ return ;
95+ }
96+ Node temp = node .left ;
97+ node .left = node .right ;
98+ node .right = temp ;
99+
100+ this .mirror (node .left );
101+ this .mirror (node .right );
102+ }
103+
104+ public static void main (String [] args ) {
105+
106+ mirrorBinaryTree btree = new mirrorBinaryTree ();
107+
108+ System .out .println ("\n --------------- before mirroring ---------------------\n " );
109+ btree .display ();
110+
111+ btree .mirror ();
112+
113+ System .out .println ("\n --------------- after mirroring ---------------------\n " );
114+ btree .display ();
115+ }
116+
117+ }
118+
119+
120+
121+
122+ /* output:
123+ Enter data for root node: 50
124+ Do you have left child for 50 -> true/false: true
125+ Enter data for left child of 50: 25
126+ Do you have left child for 25 -> true/false: true
127+ Enter data for left child of 25: 12
128+ Do you have left child for 12 -> true/false: false
129+ Do you have right child for 12 -> true/false: false
130+ Do you have right child for 25 -> true/false: true
131+ Enter data for right child of: 25: 68
132+ Do you have left child for 68 -> true/false: true
133+ Enter data for left child of 68: 17
134+ Do you have left child for 17 -> true/false: false
135+ Do you have right child for 17 -> true/false: false
136+ Do you have right child for 68 -> true/false: false
137+ Do you have right child for 50 -> true/false: true
138+ Enter data for right child of: 50: 75
139+ Do you have left child for 75 -> true/false: true
140+ Enter data for left child of 75: 48
141+ Do you have left child for 48 -> true/false: false
142+ Do you have right child for 48 -> true/false: false
143+ Do you have right child for 75 -> true/false: true
144+ Enter data for right child of: 75: 39
145+ Do you have left child for 39 -> true/false: false
146+ Do you have right child for 39 -> true/false: false
147+
148+ --------------- before mirroring ---------------------
149+
150+ 25 => 50 <= 75
151+ 12 => 25 <= 68
152+ END => 12 <= END
153+ 17 => 68 <= END
154+ END => 17 <= END
155+ 48 => 75 <= 39
156+ END => 48 <= END
157+ END => 39 <= END
158+
159+ --------------- after mirroring ---------------------
160+
161+ 75 => 50 <= 25
162+ 39 => 75 <= 48
163+ END => 39 <= END
164+ END => 48 <= END
165+ 68 => 25 <= 12
166+ END => 68 <= 17
167+ END => 17 <= END
168+ END => 12 <= END
169+ */
0 commit comments