1 class Node(object):
 2     '''定义一个结点,有左孩子和右孩子'''
 3     def __init__(self,data):
 4         # 结点数据
 5         self.data = data
 6         # 左、右 孩子指向为空
 7         self.lchild = None
 8         self.rchild = None
 9 
10 class BinaryTree(object):
11     '''二叉树'''
12     def __init__(self):
13         # 根结点默认为空
14         self.root = None
15 
16     def add(self,data):
17         # 添加数据到二叉树中 向最后进行添加数据
18         # 处理顺序:父结点 左孩子 右孩子
19         node = Node(data)
20         # 如果为空树
21         if self.root is None:
22             self.root = node
23             # 空树,加入数据则放在根节点处
24             return
25         queue = [self.root]
26         # 添加根节点,作为存在该结点的标志
27         while queue:
28             # 如果 queue 不为空
29             cur_node = queue.pop(0)
30             # 当前结点指向根节点,取第一个元素
31             if cur_node.lchild is None :
32                 # 如果左结点为空
33                 cur_node.lchild = node
34                 return
35             else:
36                 # 添加到指针内,证明存在左结点
37                 queue.append(cur_node.lchild)
38             if cur_node.rchild is None:
39                 # 如果右结点为空
40                 cur_node.rchild = node
41                 return
42             else:
43                 # 添加到指针内,证明存在右结点
44                 queue.append(cur_node.rchild)
45 
46     def pre_order(self,node):
47         '''先序遍历 -> 根左右'''
48         if node is None:
49             return
50         print(node.data,end = " ")
51         self.pre_order(node,lchild)
52         # 一直递归左面结点,返回后遍历右面
53         self.pre_order(node,rchild)
54         # 开始遍历右侧,直到为空
55 
56     def in_order(self,node):
57         '''中序遍历 -> 左根右'''
58         if node is None:
59             return
60         self.in_order(node,lchild)
61         # 一直递归左面结点
62         print(node.data,end = " ")
63         # 打印输出数据
64         self.in_order(node,rchild)
65         # 遍历右侧数据
66 
67 
68     def post_order(self,node):
69         '''后序遍历 -> 左右根'''
70         if node is None:
71             return
72         self.post_order(node,lchild)
73         # 一直递归左面结点
74         self.post_order(node,rchild)
75         # 一直递归右面结点
76         print(node.data,end = " ")

2020-04-18

如果觉得文章不错,可以分享给其他人哟~