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))