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

猜你喜欢

转载自www.cnblogs.com/Knight-of-Dulcinea/p/9991013.html