收藏:①极市开发DeepLearning ②Git使用

二叉树的遍历python 代码

 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)

 

posted @ 2019-04-21 11:53  WSX_1994  阅读(452)  评论(0编辑  收藏  举报