11# -*- coding: utf-8 -*-
22
3+ from collections import deque
4+
5+
6+ class Queue (object ):
7+ def __init__ (self ):
8+ self ._items = deque ()
9+
10+ def append (self , value ):
11+ return self ._items .append (value )
12+
13+ def pop (self ):
14+ return self ._items .popleft ()
15+
16+ def empty (self ):
17+ return len (self ._items ) == 0
18+
319
420class BinTreeNode (object ):
521 def __init__ (self , data , left = None , right = None ):
@@ -47,6 +63,30 @@ def reverse(self, subtree):
4763 self .reverse (subtree .left )
4864 self .reverse (subtree .right )
4965
66+ def layer_trav (self , subtree ):
67+ cur_nodes = [subtree ]
68+ next_nodes = []
69+ while cur_nodes or next_nodes :
70+ for node in cur_nodes :
71+ print (node .data )
72+ if node .left :
73+ next_nodes .append (node .left )
74+ if node .right :
75+ next_nodes .append (node .right )
76+ cur_nodes = next_nodes # 继续遍历下一层
77+ next_nodes = []
78+
79+ def layer_trav_use_queue (self , subtree ):
80+ q = Queue ()
81+ q .append (subtree )
82+ while not q .empty ():
83+ cur_node = q .pop ()
84+ print (cur_node .data )
85+ if cur_node .left :
86+ q .append (cur_node .left )
87+ if cur_node .right :
88+ q .append (cur_node .right )
89+
5090
5191node_list = [
5292 {'data' : 'A' , 'left' : 'B' , 'right' : 'C' , 'is_root' : True },
@@ -63,7 +103,13 @@ def reverse(self, subtree):
63103
64104
65105btree = BinTree .build_from (node_list )
106+ print ('====先序遍历=====' )
66107btree .preorder_trav (btree .root )
108+ print ('====层序遍历=====' )
109+ btree .layer_trav (btree .root )
110+ print ('====用队列层序遍历=====' )
111+ btree .layer_trav_use_queue (btree .root )
112+
67113btree .reverse (btree .root )
68- print ('====我是华丽丽滴分割线 =====' )
114+ print ('====反转之后的结果 =====' )
69115btree .preorder_trav (btree .root )
0 commit comments