二叉树的基本实现
1 from collections import deque 2 3 4 class Tree(object): 5 class TreeNode(object): 6 def __init__(self, data): 7 self.data = data 8 self.lchild = None 9 self.rchild = None 10 self.parent = None 11 12 def __str__(self): 13 if self.data: 14 return self.data 15 16 def __init__(self): 17 self.root = None 18 19 def pre_ord(self, root): 20 if not root: 21 return 22 else: 23 print(root, end=',') 24 self.pre_ord(root.lchild) 25 self.pre_ord(root.rchild) 26 27 def med_ord(self, root): 28 if not root: 29 return 30 else: 31 self.med_ord(root.lchild) 32 print(root, end=',') 33 self.med_ord(root.rchild) 34 35 def post_ord(self, root): 36 if not root: 37 return 38 else: 39 self.med_ord(root.lchild) 40 self.med_ord(root.rchild) 41 print(root, end=',') 42 43 @staticmethod 44 def level_ord(root): 45 dq = deque() 46 dq.append(root) 47 while len(dq) > 0: 48 cur_node = dq.popleft() 49 print(cur_node, end=',') 50 if cur_node: 51 if cur_node.lchild: 52 dq.append(cur_node.lchild) 53 if cur_node.rchild: 54 dq.append(cur_node.rchild) 55 56 57 if __name__ == '__main__': 58 a = Tree.TreeNode('A') 59 b = Tree.TreeNode('B') 60 c = Tree.TreeNode('C') 61 d = Tree.TreeNode('D') 62 e = Tree.TreeNode('E') 63 f = Tree.TreeNode('F') 64 g = Tree.TreeNode('G') 65 h = Tree.TreeNode('H') 66 i = Tree.TreeNode('I') 67 tree = Tree() 68 tree.root = a 69 a.lchild = b 70 a.rchild = c 71 b.lchild = d 72 c.lchild = e 73 c.rchild = f 74 d.lchild = g 75 e.lchild = h 76 e.rchild = i 77 78 tree.pre_ord(tree.root) 79 print('\n---------------------') 80 tree.med_ord(tree.root) 81 print('\n---------------------') 82 tree.post_ord(tree.root) 83 print('\n---------------------') 84 tree.level_ord(tree.root)
树的先中后序遍历是根据父节点的先后顺序决定的,
PS:先序+后序遍历不能确定一个树!

浙公网安备 33010602011771号