题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
解题思路
考察的是树的遍历算法,不太像之前的前序、中序或者后序遍历,这是一种按层遍历的方式。
按层遍历:先打印根结点,所以从树的根节点开始分析,为了打印值为8的结点的两个子节点,我们应该在遍历到该结点时把值为6和10的两个结点保存到一个容器里,先取出值为6的结点,打印出值6之后把它的值分别为5和7的两个结点放入数据容器。这个数据容器是队列。
找到从上到下打印二叉树的规律:每一次打印一个结点的时候,如果该结点有子结点,则把该结点的子节点放到一个队列的末尾。接下来到队列的头部取出最早进入队列的结点,重复前面的打印操作,直至队列中所有的结点都被打印出来为止。
Python代码
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# 返回从上到下每个节点值列表,例:[1,2,3]
def PrintFromTopToBottom(self, root):
# write code here
if not root:
return []
queue = [root]
new_queue = []
while queue:
node = queue.pop(0)
new_queue.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
return new_queue