遍历二叉树之前我们先了解一下涉及到的知识
(1)队列
>>> import queue
>>> q = queue.Queue()
>>> q.put(1)
>>> q.put(2)
>>> q.put(3)
>>> q.get()
1
>>> q.get()
2
>>> q.get()
3
>>> q.empty()
True
(2)Node:根结点
>>> class Node:
... def __init__(self,value):
... self.value = value #节点数据
... self.left = None #存当前节点左节点指针
... self.right = None #存当前节点右节点指针
...
>>> Node(50)
<__main__.Node object at 0x000000000237C780>
>>> node = Node(50)
>>> node.value
50
(3)挂结点
>>> left = Node(20)
>>> node.left = left
>>> node.left.value
20
>>> node.right = Node(60)
>>> node.right.value
60
以上知识了解后,我们来看看怎么实现遍历
# encoding=utf-8
from queue import Queue
class TreeNode(object): #结点类
def __init__(self,var,left=None,right=None):
self.var = var
self.left = left
self.right = right
class BinaryTree(object): #二叉树的类
def __init__(self,root = None): #设定了二叉树的根节点
self.root = root
def breathSearth(self): #广度遍历
if self.root == None: #判断是不是空,容错的。
return None
retList = [] #用来存储遍历后的结果
queue = Queue() #创建队列存储要遍历的节点
queue.put(self.root) #把树根节点作为种子节点放到队列中
while queue.empty() is not True: #判断队列是否为空
node = queue.get() #如果不空,就取一个值
retList.append(node.var) #把取到的值加入结果列表
if node.left != None: #判断当前结点的左结点有值
queue.put(node.left) #就加入队列
if node.right != None:
queue.put(node.right)
return retList
if __name__ == '__main__':
rootNode = TreeNode(50)
#给根节点左子树挂节点
rootNode.left = TreeNode(20,left=TreeNode(15),right=TreeNode(30))
#给根节点由右子树挂节点
rootNode.right = TreeNode(60,right=TreeNode(70))
tree = BinaryTree(rootNode)
retList = tree.breathSearth()
print (retList)
执行结果:[50, 20, 60, 15, 30, 70]