首页 > 试题广场 >

从上往下打印二叉树

[编程题]从上往下打印二叉树
  • 热度指数:704878 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面,返回。

数据范围:
0<=节点总数<=1000
-1000<=节点值<=1000
示例1

输入

{8,6,10,#,#,2,1}

输出

[8,6,10,2,1]
示例2

输入

{5,4,#,3,#,2,#,1}

输出

[5,4,3,2,1]

说明:本题目包含复杂数据结构TreeNode,点此查看相关信息
头像 牛客题解官
发表于 2020-06-01 11:02:37
精华题解 举一反三: 学习完本题的思路你可以解决如下题目: JZ77. 按之字形顺序打印二叉树 JZ78. 把二叉树打印成多行 方法一:层次遍历(推荐使用) 知识点:队列 队列是一种仅支持在表尾进行插入操作、在表头进行删除操作的线性表,插入端称为队尾,删除端称为队首,因整体类似排队的队伍而得名。它满足先进先出 展开全文
头像 Maokt
发表于 2021-06-21 15:30:40
精华题解 解题思路: (1)采用二叉树的层次遍历法再结合队列的先进先出机制/辅助栈进行解题 对二叉树进行层次遍历,使用栈/队列存储遍历节点,并将该节点存入返回列表,判断该节点是否存在左右子树,若存在左右子树则将该节点的左右子树存入栈/队列,接下来取出栈/队列的第一个元素重复以上动作,直到栈/队列中 展开全文
头像 幸福的火龙果在干饭
发表于 2021-06-28 19:24:11
精华题解 一、题目描述 JZ22 从上往下打印二叉树题目大意:从上往下打印出二叉树的每个节点, 同层节点从左至右打印 二、算法(二叉树的层序遍历) 解题思路 本题是一道经典的二叉树层序遍历题, 考察了BFS搜索算法 算法步骤:首先创建一个存放二叉树节点指针的队列, 并将根节点入队(若根为空, 直接返回空序列 展开全文
头像 不是江小白
发表于 2021-07-13 20:54:47
精华题解 1. 解题思路 此题我们可以借助队列这个数据结构 + 层序遍历来解决。只要知道队列的特点是“先进先出”,那么此题就很好解决。 首先判断二叉树是否为空; 其次先把根节点放入队列,然后弹出根节点,添加到列表中; 开始遍历每一层,如果左右节点不为空,则放入队列里,接着弹出添加到列表; 重复前面的过程,直 展开全文
头像 Peterliang
发表于 2021-06-20 18:33:54
精华题解 题意分析 首先,这个题目没有说明数据是如何给出的,建议补一个样例的解释。另外,这个题目的难度应该属于简单范围。这是我对本题样例的理解。 题目给出一个二叉树的先序遍历的序列,需要我们求出这个二叉树的层序遍历的序列。样例解释如上面所示。前置知识 首先,我们需要知道什么是二叉树,简单来说就是一个一棵树 展开全文
头像 leaves0924
发表于 2021-06-21 11:21:40
精华题解 题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。示例1输入:{5,4,#,3,#,2,#,1}返回值:[5,4,3,2,1] 题目分析 要求二叉树“从上往下”打印(即按层打印),又称为二叉树的广度优先搜索(BFS)。如示例1:{5,4,#,3,#,2,#,1}从上往下遍历结果为:5, 展开全文
头像 牛客500979850号
发表于 2021-07-16 21:47:47
精华题解 方法一:BFS 题目很简单,从上往下层层遍历并打印节点值即可,用一个队列来存储节点,遍历打印当前节点的值,并将子节点入队。class Solution { public: vector<int> PrintFromTopToBottom(TreeNode* root) { 展开全文
头像 一叶浮尘
发表于 2019-08-15 21:42:31
从上往下打印出二叉树的每个节点,同层节点从左至右打印。 这道题目本身思想不难,用一个队列来存储这些曾经访问过但是仍旧有用的节点。应该难就难在在各个编程语言中队列的实现,尤其如果要用C++或者C来编程那就更难了,所以这道题目在锻炼了解题思路的同时也让我对Java中对QUeue这个高级数据结构的实现 展开全文
头像 空罐少女
发表于 2019-09-21 20:46:24
Java ---小白成长记 【思路】: 通过上面的具体例子分析,可以找到规律:每一次打印一个节点的时候,如果该节点有子节点,则把该节点的子节点放到一个队列的尾部。接下来到对队列的头部取出最早进入队列的节点放到ArrayList 中,重复前面的操作,直至队列中所有的节点都存到ArrayList中。 i 展开全文
头像 BillyHao
发表于 2020-01-11 09:37:56
//思路:此题实际为二叉树的广度遍历,广度遍历必须借助其他的数据结构才能进行,比如最常见的Queue //(不能直接递归哦) import java.util.ArrayList; import java.util.Queue; import java.util.LinkedList; /** p 展开全文
头像 橙子爱吃桃子
发表于 2020-05-10 13:12:54
C++/代码: class Solution { public: vector<int> PrintFromTopToBottom(TreeNode* root) { vector<int> res; //定一个一维数组,存放各个结点 展开全文
头像 常喝水
发表于 2019-12-16 10:26:35
二叉树的层序遍历,利用队列先进先出的性质 # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None clas 展开全文
头像 程序猿的浪漫
发表于 2019-09-30 21:50:16
题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。 首先这个用C++ 的队列实现是比较简单方便的,下面是python实现,定义了多个列表,比起C++要的队列要稍微麻烦点 思路:(1)首先定义一个需要返回的列表 res(2)每次遍历到有节点的时候都要插入节点值到res(3)另外定义 next 展开全文
头像 牛客82035003号
发表于 2022-05-01 22:34:33
和NC15的区别在于这里并不需要把每层的数值单独放在一个数组里,而是把二叉树的所有元素放在一个大数组里,那么问题就简单些了。 int* PrintFromTopToBottom(struct TreeNode* root, int* return 展开全文
头像 蓉城小晋
发表于 2021-11-13 11:09:07
```/* function TreeNode(x) { this.val = x; this.left = null; this.right = null; } */ let resArr = [] function PrintFromTopToBottom(root) { 展开全文
头像 牛客网小哥
发表于 2020-05-21 20:37:50
public class Solution {     public ArrayList<Integer> PrintFromTopToBottom(TreeNode root)  展开全文
头像 designeer
发表于 2021-11-05 11:35:02
方法:层次遍历 这道题就是一个模板题,对队列的使用。因为要满足先进先出的特性。 初始化:一个队列queue<TreeNode*> q, 将root节点入队列q 如果队列不空,做如下操作: 弹出队列头,保存为node,将node的左右非空孩子加入队 展开全文