1. 程式人生 > >Python資料結構--樹遍歷演算法

Python資料結構--樹遍歷演算法

 1 '''
 2 遍歷是訪問樹的所有節點的過程,也可以列印它們的值。 因為所有節點都通過邊(連結)連線,所以始終從根(頭)節點開始。
 3 也就是說,我們不能隨機訪問樹中的一個節點。 這裡介紹三種方式來遍歷一棵樹 -順序遍歷 -前序遍歷 -後序遍歷
 4 '''
 5 
 6 
 7 class Node:
 8     def __init__(self, data):
 9         self.left = None
10         self.right = None
11         self.data = data
12 
13     def insert(self, data):
14 if self.data: 15 if data < self.data: 16 if self.left is None: 17 self.left = Node(data) 18 else: 19 self.left.insert(data) 20 elif data > self.data: 21 if self.right is None:
22 self.right = Node(data) 23 else: 24 self.right.insert(data) 25 else: 26 self.data = data 27 28 # Left -> Root -> Right 順序遍歷 29 def inorderTraversal(self, root): 30 res = [] 31 if root: 32 res = self.inorderTraversal(root.left)
33 res.append(root.data) 34 res = res + self.inorderTraversal(root.right) 35 return res 36 37 # Root -> Left ->Right 前序遍歷 38 def PreorderTraversal(self, root): 39 res = [] 40 if root: 41 res.append(root.data) 42 res = res + self.PreorderTraversal(root.left) 43 res = res + self.PreorderTraversal(root.right) 44 return res 45 46 # Left ->Right -> Root 後序遍歷 47 def PostorderTraversal(self, root): 48 res = [] 49 if root: 50 res = self.PostorderTraversal(root.left) 51 res = res + self.PostorderTraversal(root.right) 52 res.append(root.data) 53 return res 54 55 56 root = Node(27) 57 root.insert(14) 58 root.insert(35) 59 root.insert(10) 60 root.insert(19) 61 root.insert(31) 62 root.insert(42) 63 print(root.inorderTraversal(root)) 64 print(root.PreorderTraversal(root)) 65 print(root.PostorderTraversal(root))