1+ package Lecture20 ;
2+
3+ import java .util .Scanner ;
4+
5+ public class treeTraversals {
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 treeTraversals () {
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+
89+ // tree traversals
90+
91+ public void preOrder () {
92+ this .preOrder (this .root );
93+ }
94+
95+ private void preOrder (Node node ) { // NLR (node, left, right)
96+ if (node == null ) {
97+ return ;
98+ }
99+ System .out .print (node .data + " " );
100+ this .preOrder (node .left );
101+ this .preOrder (node .right );
102+ }
103+
104+ public void inOrder () {
105+ this .inOrder (this .root );
106+ }
107+
108+ private void inOrder (Node node ) { // LNR
109+ if (node == null ) {
110+ return ;
111+ }
112+ this .inOrder (node .left );
113+ System .out .print (node .data + " " );
114+ this .inOrder (node .right );
115+ }
116+
117+ public void postOrder () {
118+ this .postOrder (this .root );
119+ }
120+
121+ private void postOrder (Node node ) { // LRN
122+ if (node == null ) {
123+ return ;
124+ }
125+ this .postOrder (node .left );
126+ this .postOrder (node .right );
127+ System .out .print (node .data + " " );
128+ }
129+
130+ public static void main (String [] args ) {
131+
132+ treeTraversals btree = new treeTraversals ();
133+
134+ System .out .println ("\n -------------------------------\n " );
135+ btree .display ();
136+ System .out .println ("\n -------------------------------------------" );
137+
138+ System .out .println ("\n --------- pre-order traversal -------------\n " );
139+ btree .preOrder ();
140+ System .out .println ();
141+
142+ System .out .println ("\n --------- in-order traversal -------------\n " );
143+ btree .inOrder ();
144+ System .out .println ();
145+
146+ System .out .println ("\n --------- post-order traversal -------------\n " );
147+ btree .postOrder ();
148+ System .out .println ();
149+
150+ }
151+ }
152+
153+
154+
155+ /* output:
156+ Enter data for root node: 50
157+ Do you have left child for 50 -> true/false: true
158+ Enter data for left child of 50: 25
159+ Do you have left child for 25 -> true/false: true
160+ Enter data for left child of 25: 12
161+ Do you have left child for 12 -> true/false: false
162+ Do you have right child for 12 -> true/false: false
163+ Do you have right child for 25 -> true/false: true
164+ Enter data for right child of: 25: 68
165+ Do you have left child for 68 -> true/false: false
166+ Do you have right child for 68 -> true/false: false
167+ Do you have right child for 50 -> true/false: true
168+ Enter data for right child of: 50: 75
169+ Do you have left child for 75 -> true/false: true
170+ Enter data for left child of 75: 39
171+ Do you have left child for 39 -> true/false: false
172+ Do you have right child for 39 -> true/false: false
173+ Do you have right child for 75 -> true/false: true
174+ Enter data for right child of: 75: 49
175+ Do you have left child for 49 -> true/false: false
176+ Do you have right child for 49 -> true/false: false
177+
178+ -------------------------------
179+
180+ 25 => 50 <= 75
181+ 12 => 25 <= 68
182+ END => 12 <= END
183+ END => 68 <= END
184+ 39 => 75 <= 49
185+ END => 39 <= END
186+ END => 49 <= END
187+
188+ -------------------------------------------
189+
190+ --------- pre-order traversal -------------
191+
192+ 50 25 12 68 75 39 49
193+
194+ --------- in-order traversal -------------
195+
196+ 12 25 68 50 39 75 49
197+
198+ --------- post-order traversal -------------
199+
200+ 12 68 25 39 49 75 50
201+ */
0 commit comments