5566 */
77
8+ import java .util .LinkedList ;
9+ import java .util .Queue ;
810import java .util .Stack ;
911
1012/**
@@ -212,6 +214,26 @@ public void postOrder2(Node node) {
212214 }
213215 }
214216
217+ /**
218+ * 树的层次遍历,类似于图的BFS
219+ * @param root
220+ */
221+ public void levelRead (Node root ) {
222+ if (root == null ) return ;
223+ Queue <Node > queue = new LinkedList <>();
224+ queue .offer (root );
225+ while (!queue .isEmpty ()) {
226+ Node current = queue .poll ();
227+ System .out .print (current .data + "-->" );
228+ if (current .left != null ) {
229+ queue .offer (current .left );
230+ }
231+ if (current .right != null ) {
232+ queue .offer (current .right );
233+ }
234+ }
235+ }
236+
215237
216238 /**
217239 * 得到树中最小的节点
@@ -248,23 +270,27 @@ public Node getMaxNode() {
248270 }
249271
250272
251- public void getTree (int [] preOrders , int [] inOrders ,boolean isLeft ) {
273+ public void getTree (int [] preOrders , int [] inOrders ,Node r ) {
252274 int root = preOrders [0 ];
253- if (isLeft ) {
254- System .out .println ("左" + root );
255- }else {
256- System .out .println ("右" + root );
257- }
258-
259- int index = new Find (). binarySearchFind (inOrders , root );
275+ // if (isLeft) {
276+ // System.out.println("左" + root);
277+ // }else{
278+ // System.out.println("右" + root);
279+ // }
280+ r . data = root ;
281+ int index = findIndex (inOrders , root );
260282 int [] left = new int [index ];
261283 int [] preLeft = new int [index ];
262284 if (left .length != 0 ) {
263285 for (int i = 0 ; i < index ; i ++) {
264286 left [i ] = inOrders [i ];
265287 preLeft [i ] = preOrders [i + 1 ];
266288 }
289+ Node node = new Node (preLeft [0 ]);
290+ r .left = node ;
267291 }
292+
293+
268294 int size = inOrders .length - index - 1 ;
269295 int [] right = new int [inOrders .length - index - 1 ];
270296 int [] preRight = new int [size ];
@@ -273,17 +299,17 @@ public void getTree(int[] preOrders, int[] inOrders,boolean isLeft) {
273299 right [i ] = inOrders [i + index + 1 ];
274300 preRight [i ] = preOrders [preLeft .length + i + 1 ];
275301 }
302+ Node node = new Node (preRight [0 ]);
303+ r .right = node ;
276304 }
277305
278306 if (preLeft .length != 0 ) {
279- getTree (preLeft , left ,true );
307+ getTree (preLeft , left ,r . left );
280308 }
281309
282310 if (preRight .length != 0 ) {
283- getTree (preRight , right ,false );
311+ getTree (preRight , right ,r . right );
284312 }
285- System .out .println ();
286-
287313 }
288314
289315 public static class Node {
@@ -299,4 +325,13 @@ public Node(int data) {
299325 public Node getRoot () {
300326 return root ;
301327 }
328+
329+ private int findIndex (int [] nums , int target ) {
330+ for (int i = 0 ; i < nums .length ;i ++) {
331+ if (nums [i ] == target ) {
332+ return i ;
333+ }
334+ }
335+ return -1 ;
336+ }
302337}
0 commit comments