二叉树的实现
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
正是江南好风景