Achieve binary tree (supplement)

Achieve binary tree (supplement)

The binary tree comprises a binary tree to realize preorder traversal, in order traversal and postorder traversal sequence and the binary tree, further comprising a binary tree height, and inverted binary tree leaf nodes

The binary tree traversal sequence is still implemented in Python deque a queue is built, according to the nature of the FIFO queue (FIFO), the root node of the binary tree first in the queue, it is determined whether the queue is empty, if not empty, then Pops an element, to print the value of the element, if the element has left the child, put the child into the team left, the right if there is a child, have a child put into the team

Code:

  . 1  from Collections Import deque
   2  
  . 3  
  . 4  class Queue:   # With built deque we can quickly implement a Queue 
  . 5      DEF  the __init__ (Self):
   . 6          self._elem = deque ()
   . 7  
  . 8      DEF the append (Self, value):
   . 9          return Self ._elem.append (value)
 10  
. 11      DEF POP (Self):
 12 is          return self._elem.popleft ()
 13 is  
14      DEF empty (Self):
 15          return len (self._elem) == 0
 16 
 17 
 18 class BTree(object):
 19     def __init__(self, data=None, left=None, right=None):
 20         self.data = data
 21         self.left = left
 22         self.right = right
 23 
 24     def preorder(self):
 25         if self.data is not None:
 26             print(self.data, end=',')
 27         if self.left is not None:
 28             self.left.preorder()
 29         if self.right is not None:
 30             self.right.preorder()
 31 
 32     def midorder(self):
 33         if self.left is not None:
 34             self.left.midorder()
 35         if self.data is not None:
 36             print(self.data, end=',')
 37         if self.right is not None:
 38             self.right.midorder()
39  
40      DEF postorder (Self):
 41 is          IF self.left IS  Not None:
 42 is              self.left.postorder ()
 43 is          IF self.right IS  Not None:
 44 is              self.right.postorder ()
 45          IF self.data IS  Not None :
 46 is              Print (self.data, End = ' , ' )
 47  
48      DEF levelorder (Self):
 49  
50          # returns the left child of a node 
51 is          DEFLChild_Of_Node (the Node):
 52              return node.left IF node.left IS  not None the else None
 53  
54          # Returns the right child of a node 
55          DEF RChild_Of_Node (the Node):
 56              return node.right IF node.right IS  not None the else None
 57 is  
58          # sEQUENCE traversal list 
59          level_order = []
 60          # whether to add the data in the root node 
61 is          iF self.data iS  Not None:
 62 is             level_order.append ([Self])
 63 is  
64          # binary tree height 
65          height = self.height ()
 66          IF height> =. 1 :
 67              # of the second layer and subsequent layers is operated, the node is added in level_order not the data 
68              for _ in Range (2, + height. 1 ):
 69                  Level = []   # of the node layer 
70                  for node in level_order [-1 ]:
 71 is                      # If the left child is not empty, the left child added 
72                      IF LChild_Of_Node (Node):
 73 is                         level.append (LChild_Of_Node (Node))
 74                      # If not empty right child, right child is added 
75                      IF RChild_Of_Node (Node):
 76                          level.append (RChild_Of_Node (Node))
 77                  # If the layer is non-empty, then add the layer 
78                  IF Level:
 79                      level_order.append (Level)
 80  
81              # extracted data in each layer 
82              for I in Range (0, height):   # layers 
83                  for index in Range (len (level_order [I])):
 84                      level_order [i] [index] = level_order[i][index].data
 85 
 86         return level_order
 87 
 88     def height(self):
 89         if self.data is None:
 90             return 0
 91         elif self.left is None and self.right is None:
 92             return 1
 93         elif self.left is None and self.right is not None:
 94             return 1 + self.left.height()
 95         elif self.left is not None and self.right is None:
 96             return 1 + self.left.height()
 97         else:
 98             return 1 + max(self.left.height(), self.right.height())
 99 
100     def leaves(self):
101         if self.data is None:
102             return None
103         elif self.left is None and self.right is None:
104             print(self.data, end=',')
105         elif self.left is None and self.right is not None:
106             self.right.leaves()
107         elif self.left is not None and self.right is None:
108             self.left.leaves()
109         else:
110             self.left.leaves()
111             self.right.leaves()
112 
113     # 反转二叉树
114     def reverse(self):
115         if self.data is not None:
116             if self.left and self.right:
117                 self.left, self.right = self.right, self.left
118                 self.left.reverse()
119                 self.right.reverse()
120 
121     # @staticmethod
122     # def layer_trav(subtree):
123     #     cur_nodes = [subtree]  # current layer nodes
124     #     next_nodes = []
125     #     while cur_nodes or next_nodes:
126     #         for node in cur_nodes:
127     #             print(node.data, end=',')
128     #             if node.left:
129     #                 next_nodes.append(node.left)
130     #             if node.right:
131     #                 next_nodes.append(node.right)
132     #         cur_nodes = next_nodes  # 继续遍历下一层
133     #         next_nodes = []
134 
135     @staticmethod
136     def layer_trav(subtree):
137         q = Queue()
138         q.append(subtree)
139         while not q.empty():
140             node = q.pop()
141             print(node.data, end=',')
142             if node.left:
143                 q.append(node.left)
144             if node.right:
145                 q.append(node.right)
146 
147 
148 if __name__ == '__main__':
149     right_tree = BTree(6)
150     right_tree.left = BTree(2)
151     right_tree.right = BTree(4)
152 
153     left_tree = BTree(5)
154     left_tree.left = BTree(1)
155     left_tree.right = BTree(3)
156 
157     tree = BTree(11)
158     tree.left = left_tree
159     tree.right = right_tree
160 
161     left_tree = BTree(7)
162     left_tree.left = BTree(3)
163     left_tree.right = BTree(4)
164 
165     right_tree = tree  # 增加新的变量
166     tree = BTree(18)
167     = tree.left left_tree
 168      tree.right = right_tree
 169      tree.root = Tree
 170.  
171 is      Print ( ' preorder as: ' )
 172      tree.preorder ()
 173      Print ( ' \ n- ' )
 174  
175      Print ( ' subsequent traversal of: ' )
 176      tree.postorder ()
 177      Print ( ' \ n- ' )
 178  
179      Print ( ' preorder as:' )
 180 [      tree.midorder ()
 181      Print ( ' \ n- ' )
 182  
183 is      Print ( ' sequence of traversal: ' )
 184      level_order = tree.levelorder ()
 185      tree.layer_trav (Tree)
 186      Print ( ' \ n- ' )
 187      Print (level_order)
 188  
189      Print ( ' leaf node: ' )
 190      tree.leaves ()
 191      Print ( '\ n- ' )
 192  
193      Print ( ' height of the tree is: ' )
 194      Print (tree.height ())
 195      Print ( ' \ n- ' )
 196  
197      Print ( ' inverted binary ' )
 198      tree.reverse ()
 199      Print ( ' preorder ' )
 200 is      tree.preorder ()
 201      Print ( ' \ n- ' )
 202      Print ( ' layer preorder')
203     tree.layer_trav(tree)

 

Guess you like

Origin www.cnblogs.com/yang-he/p/11407653.html