直接层次遍历是比较简单的,但是题目要求的分层打印,这就变得稍微有些麻烦
我是采用两个队列的方法实现。
1.将树结构入队列1。
2.当队列1和队列2都不为空的时候,则一直循环。
3.当队列1不为空的时候,就一直取出队列1中的元素,打印其根节点数据,然后将其子树存入队列2,直到队列1为空结束。
4.与3相反。
1 #!/usr/bin/env python3 2 3 import queue 4 5 class Node(object): 6 def __init__(self, data, left=None, right=None): 7 self.data = data 8 self.left = left 9 self.right = right 10 tree = Node(1,Node(2,Node(4,Node(8)),Node(5)),Node(3,Node(6),Node(7))) 11 12 def level_traversal(tree): 13 q1 = queue.Queue() 14 q2 = queue.Queue() 15 q1.put(tree) 16 try: 17 while not q1.empty() or not q2.empty(): 18 while not q1.empty(): 19 e = q1.get() 20 print(e.data, end=" ") 21 q2.put(e.left) 22 q2.put(e.right) 23 print() 24 while not q2.empty(): 25 e = q2.get() 26 print(e.data, end=" ") 27 q1.put(e.left) 28 q1.put(e.right) 29 print() 30 except AttributeError: 31 print() 32 print("tree has traversaled") 33 34 if __name__=="__main__": 35 level_traversal(tree)