1 __author__ = "WSX" 2 3 class Node: 4 def __init__(self, val = None, left = None, right = None): 5 self.val = val 6 self.left = left 7 self.right = right 8 9 class tree: 10 def __init__(self, L): 11 self.val = L 12 13 def bulid(self,root, i): #将列表转化建立二叉树 14 if i < len(self.val): 15 root = Node(val = self.val[i]) 16 root.left = self.bulid(root.left, 2*i+1) 17 root.right = self.bulid(root.right, 2*i+2) 18 return root 19 return root 20 21 def preTraverse(self, tree_): 22 root = tree_ 23 if root: 24 print(root.val) 25 self.preTraverse(root.left) 26 self.preTraverse(root.right) 27 28 def midTraverse(self, tree_): 29 root = tree_ 30 if root: 31 self.preTraverse(root.left) 32 print(root.val) 33 self.preTraverse(root.right) 34 35 36 def postTraverse(self, tree_): 37 root = tree_ 38 if root: 39 self.preTraverse(root.left) 40 self.preTraverse(root.right) 41 print(root.val) 42 43 def cengci(self, tree_): 44 root = tree_ 45 queue = [root] #借助队列 46 while root and len(queue)!= 0: 47 print(queue[0].val) #visit 48 if queue[0].left: 49 queue.append(queue[0].left) 50 if queue[0].right: 51 queue.append(queue[0].right) 52 queue.pop(0) 53 54 T = tree(['1','2','3',"4","5","6"]) 55 root = T.bulid(Node(), 0) 56 print("preTraverse"); T.preTraverse(root) 57 print("postTraverse");T.postTraverse(root) 58 print("midTraverse");T.midTraverse(root) 59 print("cengci");T.cengci(root)
非递归遍历:
1 __author__ = "WSX" 2 3 def pre(root): 4 if not root: 5 return None 6 stack = [root] 7 res = [] 8 while stack: 9 res.append(root.val) 10 if root.right: 11 stack.append(root.right) 12 if root.left: 13 stack.append(root.left) 14 root = stack.pop() 15 return res 16 17 def inOrderTraverse(node): 18 stack = [] 19 pos = node 20 while pos is not None or len(stack) > 0: 21 if pos is not None: 22 stack.append(pos) 23 pos = pos.left 24 else: 25 pos = stack.pop() 26 print(pos.val) 27 pos = pos.right 28 29 def postOrderTraverse(node): 30 stack = [node] 31 stack2 = [] 32 while len(stack) > 0: 33 node = stack.pop() 34 stack2.append(node) 35 if node.left is not None: 36 stack.append(node.left) 37 if node.right is not None: 38 stack.append(node.right) 39 while len(stack2) > 0: 40 print(stack2.pop().val)