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