编程练习:实现树的层次遍历 (CVTE笔试)

直接层次遍历是比较简单的,但是题目要求的分层打印,这就变得稍微有些麻烦

我是采用两个队列的方法实现。

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)
原文地址:https://www.cnblogs.com/xautxuqiang/p/6523104.html