1 题目描述

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

2 思路和方法

  使用一个队列存放节点。先将根节点加入到队列中,然后循环遍历队列中的元素,遍历过程中,访问该节点的左右子节点,再将左右子节点加入到队列中。

  例子:1 2 3 4 5 6 7 8

  对于第一层,只有根节点 1,第二层有节点2和3。先将根节点1加入到队列中,接下来要打印节点为1的两个子节点,应该在遍历到该根节点时把值为2和3的两个子节点保存到队列。按照从左向右打印的要求,取出2,保存其子节点4;随后取出3,保存其子节点“5”和“6”;随后取出4,保存子节点“7”;随后取出5,子节点NULL,不保存;返回上一层6,取出6,保存子节点8;取出7,取出8。

3 C++核心代码

 /*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
vector<int> PrintFromTopToBottom(TreeNode* root) {
vector<int> res;
if (root == nullptr) return res;
queue<TreeNode*> que;
que.push(root);
while (!que.empty())
{
TreeNode* node = que.front();
if (node->left){
que.push(node->left);
}
if (node->right){
que.push(node->right);
}
res.push_back(node->val);
que.pop();
}
return res;
}
};

4 C++完整代码

 #include<iostream>
#include <vector>
#include <queue> using namespace std; struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
}; class Solution {
public:
vector<int> PrintFromTopToBottom(TreeNode* root) {
vector<int> res;
if (root == nullptr) return res;
queue<TreeNode*> que;
que.push(root);
while (!que.empty())
{
TreeNode* node = que.front();
if (node->left){
que.push(node->left);
}
if (node->right){
que.push(node->right);
}
res.push_back(node->val);
que.pop();
}
return res;
}
}; int main()
{
Solution* s = new Solution();
TreeNode* t1 = new TreeNode();
TreeNode* t2 = new TreeNode();
TreeNode* t3 = new TreeNode();
TreeNode* t4 = new TreeNode();
TreeNode* t5 = new TreeNode();
t1->left = t2;
t1->right = t3;
t2->left = t4;
t2->right = t5;
s->PrintFromTopToBottom(t1);
//cout << << endl; system("pause");
return ;
}

参考资料

https://blog.csdn.net/aaa958099161/article/details/90344313

https://blog.csdn.net/sxs11/article/details/75286814

剑指offer22:从上往下打印出二叉树的每个节点,同层节点从左至右打印。的更多相关文章

  1. 剑指Offer-22.从上往下打印二叉树(C++/Java)

    题目: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 分析: 按层次打印二叉树的节点,重点就是我们在打印一层节点的时候,同时按顺序保存好当前节点的下一层节点,也就是左节点和右节点,当此层节点 ...

  2. 剑指Offer 从上往下打印二叉树(dfs)

    题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印.   思路: 用一个队列来辅助,先压入根节点,设置一个指针记录队列头位置,判断队头指针有没有孩子,有压入左右孩子,,,操作完一次,队头出 ...

  3. 剑指offer——从上往下打印二叉树

    题目描述:从上到下打印二叉树的节点,同一层的从左到右打印 思路:采用队列来存储单层的节点,然后通过删除队列的头结点操作,依次遍历每一层. 代码为: import java.util.ArrayList ...

  4. 剑指offer--29.从上往下打印二叉树

    层序遍历,队列 ------------------------------------------------------------------------------------- 时间限制:1 ...

  5. 用js刷剑指offer(从上到下打印二叉树)

    题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 牛客网链接 js代码 /* function TreeNode(x) { this.val = x; this.left = null ...

  6. 剑指offer从上往下打印二叉树 、leetcode102. Binary Tree Level Order Traversal(即剑指把二叉树打印成多行、层序打印)、107. Binary Tree Level Order Traversal II 、103. Binary Tree Zigzag Level Order Traversal(剑指之字型打印)

    从上往下打印二叉树这个是不分行的,用一个队列就可以实现 class Solution { public: vector<int> PrintFromTopToBottom(TreeNode ...

  7. 剑指offer23 从上往下打印二叉树

    没有把队列的头部弹出,出现内存错误:

  8. 从上到下打印二叉树(剑指offer-22)

    题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 题目解析 使用队列来进行层次遍历,本质上就是宽搜. 题目解答 import java.util.*; /** public class ...

  9. 剑指Offer(二十四):二叉树中和为某一值的路径

    剑指Offer(二十四):二叉树中和为某一值的路径 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.ne ...

随机推荐

  1. 微信小程序“一劳永逸”的接口封装

    前言 最近都在研究小程序了,我可以的! 需求 之前都是用vue来开发项目的,接口模块我特意封装了一下.感觉也可以记录一下 小程序的接口虽说简单,但是重复调用那么多,显得不专业(一本正经的胡说八道) 还 ...

  2. JVM 初始化阶段例子 final常量

    1.创建FinalTest类,里面有一个final常量x class FinalTest{ public static final int x = 3; static { System.out.pri ...

  3. 阿里云 商标 SAAS

    商标注册-注册商标查询-商标交易平台-阿里云商标https://tm.aliyun.com/#/ 阿里云商标查询入口-云栖社区-阿里云https://yq.aliyun.com/articles/69 ...

  4. Docs-.NET-C#-指南-语言参考-关键字-值类型:enum

    ylbtech-Docs-.NET-C#-指南-语言参考-关键字-值类型:enum 1.返回顶部 1. enum(C# 参考) 2015/07/20 enum 关键字用于声明枚举,一种包含一组被称为枚 ...

  5. shell编程系列20--文本处理三剑客之awk常用选项

    shell编程系列20--文本处理三剑客之awk常用选项 awk选项总结 选项 解释 -v 参数传递 -f 指定脚本文件 -F 指定分隔符 -V 查看awk的版本号 [root@localhost s ...

  6. ES6深入浅出-3 三个点运算 & 新版字符串-1.函数与对象的语法糖

    主要讲的内容 时间充裕的话就讲,模板字面量 默认参数值 首先讲es6之前,我们是怎么做的.例如我们要写一个求和的函数, 请两个参数的和,但是如果有的人就是穿一个参数呢? 那么b没有传值,b的值是多少呢 ...

  7. 软件定义网络基础---SDN控制平面

    一:SDN控制平面 一个或多个SDN控制器组成,是网络的大脑.  对底层网络交换设备进行集中管理,状态监测.转发决策以及处理和调 度数据平面的流量:  通过北向接口向上层应用开放多个层次的可编程能 ...

  8. scons 简单入门

    scons 简单入门 摘自:https://www.jianshu.com/p/e4bd3ab9e5d6 0.2042019.01.20 12:58:44字数 1201阅读 3021 简单入门 hel ...

  9. NSGA,NSGA-II,Epsilon-MOEA,DE C语言Deb教授原版代码

    NSGA,NSGA-II,Epsilon-MOEA,Basic Differential Evolution (DE) C语言Deb教授原版代码地址 觉得有用的话,欢迎一起讨论相互学习~[Follow ...

  10. SAP 增强篇 Method1 BADI增强的查找方法

    查找BADI的方法:(1)通过SE24,输入CL_EXITHANDLER,然后在方法GET_INSTANCE中设置断点,然后运行事务代码判断 exit_name的值,操作过程如下:输入se24,然后输 ...