剑指Offer第22题-从上往下打印二叉树

题目

从上往下打印出二叉树的每个节点,同层节点从左至右打印。

思路

二叉树的层序遍历。
难点在于要求返回一个数组,递归实现起来有困难。
所以实际上是要求非递归实现二叉树的层序遍历。

一个比较好的思路是用队列。初始时若根节点非空,就将其入队,每次出队一个节点,将该节点的值写入数组中,检查其左右孩子,若非空就入队,直至队列为空,二叉树遍历完毕。

代码

# -*- 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
        values = []
        if not root:
            return values
        queue = [root]
        while queue:
            node = queue.pop(0)
            values.append(node.val)
            if node.left:
                queue.append(node.left)
            if node.right:
                queue.append(node.right)
        
        return values

推荐阅读更多精彩内容

  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 3,726评论 1 30
  • 数据结构和算法--二叉树的实现 几种二叉树 1、二叉树 和普通的树相比,二叉树有如下特点: 每个结点最多只有两棵子...
    sunhaiyu阅读 4,586评论 0 14
  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    StarryThrone阅读 4,001评论 0 12
  • 树 记录《剑指offer》中所有关于树的题目,以及LeetCode中的相似题目。 相关题目列表 题目 树是一种最常...
    wenmingxing阅读 1,025评论 2 13
  • 几天前,读了周国平老师的《永远未完成》,之后便对爱情和婚姻有了一种全新的认知,遂写下这篇短文分享一下我的所想所...
    努力扎根的树阅读 90评论 0 0