二叉树的实现

 1 #定义二叉树的节点
 2 class Node(object):
 3     def __init__(self,elem):
 4         """
 5         param: self.elem 是节点的数据域
 6                 self.lchild 是节点的左孩子
 7                 self.rchild 是节点的右孩子
 8         """
 9         self.elem = elem
10         self.lchild = None
11         self.rchild = None
12 
13 class Tree(object):
14     def __init__(self):
15         self.root = None
16     #添加节点
17     def add(self,elem):
18         """
19         param: elem 是传进来的数据,我们要实例化一个节点接收它,
20                 queue: 创建一个队列来接收和弹出节点       
21         """
22         #创建节点
23         node = Node(elem)    
24         if self.root == None:
25             """如果根节点是None,则表示一颗空树,直接把该节点赋给root节点"""
26             self.root = node
27             return
28         queue = []
29         queue.append(self.root)
30         while queue:
31             """队列的弹出要加0,与栈相仿"""
32             curNode = queue.pop(0)
33             if curNode.lchild == None:
34                 curNode.lchild = node
35                 return
36             else:
37                 queue.append(curNode.lchild)
38             if curNode.rchild == None:
39                 curNode.rchild = node
40                 return
41             else: 
42                 queue.append(curNode.rchild)
43 
44     #广度优先遍历
45     def travel(self):
46         queue = []
47         #判断根节点是否存在
48         if self.root is None:
49             return
50         else:
51             queue.append(self.root)
52         while queue:
53             curNode = queue.pop(0)
54             print(curNode.elem,end='\t')
55             if curNode.lchild is not None:
56                 queue.append(curNode.lchild)
57             if curNode.rchild is not None:
58                 queue.append(curNode.rchild)
59             
60 if __name__ == '__main__':
61     tree = Tree()
62     tree.add('A')
63     tree.add('B')
64     tree.add('C')
65     tree.add('D')
66     tree.add('E')
67     print('广度优先遍历')
68     tree.travel()
1 广度优先遍历
2 A       B       C       D       E

 

posted @ 2020-05-15 13:11  小他_W  阅读(143)  评论(0编辑  收藏  举报