剑指offer——面试题23:从上往下打印二叉树

Solution1:

典型的BFS算法!
思路一开始没想到,按照书上的思路写的答案。。。
注意:deque是双向队列,在头尾插入都很快!

/*
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 == NULL)return res;deque<TreeNode*> deque;deque.push_back(root);while(!deque.empty()){int a = deque.front()->val;res.push_back(a);if(deque.front()->left != NULL)deque.push_back(deque.front()->left);if(deque.front()->right != NULL)deque.push_back(deque.front()->right);deque.pop_front();}return res;}
};

双向队列queue的常用函数

deque<int> que; //定义了一个整型的双端队列;
que.front(); //返回容器que的第一个元素的引用。如果que为空,则该操作为空。
que.pop_back(); //删除最后一个数据。
que.pop_front(); //删除头部数据。
que.push_back(elem); //在尾部加入一个数据。
que.push_front(elem); //在头部插入一个数据。

Solution2:

2018年9月1日重做,利用队列做就行queue

/*
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 == NULL)return res;queue<TreeNode* > tree_queue;tree_queue.push(root);while (!tree_queue.empty()) {int temp = tree_queue.front()->val;res.push_back(temp);if (tree_queue.front()->left)tree_queue.push(tree_queue.front()->left);if (tree_queue.front()->right)tree_queue.push(tree_queue.front()->right);tree_queue.pop();}return res;}
};

队列queue的常用函数

queue<int> que; //定义了一个整型的双端队列
que.front(); //返回容器que的头部元素
que.pop(); //删除头部数据
que.push(elem) //在尾部加入一个数据
/*和栈stack的成员函数差不多*/

剑指offer——面试题23:从上往下打印二叉树相关推荐

  1. 剑指offer面试题[23]-从上往下打印二叉树(按层序打印)

    题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. /* struct TreeNode {int val;struct TreeNode *left;struct TreeNode * ...

  2. 【剑指offer-Java版】23从上往下打印二叉树

    从上往下打印二叉树:如果把这个书看做是一个特殊的图,那么该打印过程就类似于一个广度优先遍历 public class _Q23 {public <T> void PrintTreeFrom ...

  3. 剑指offer(21)从上往下打印二叉树

    public class Solution {public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {//创建俩个数列 ...

  4. 剑指offer——面试题5:从尾到头打印链表

    剑指offer--面试题5:从尾到头打印链表 Solution1:我的答案 /** * struct ListNode { * int val; * struct ListNode *next; * ...

  5. [剑指offer]面试题23:从上往下打印二叉树

    面试题23:从上往下打印二叉树 题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印.例如输入图4.5中的二叉树,则依次打印出8.6.10.5.7.9.11. 二叉树结点的定义如下 ...

  6. 剑指offer面试题23:从上到下打印二叉树(树的层序遍历)

    题目:从上往下打印出二叉树的每个节点,同一层的结点按照从左往右的顺序打印. 解题思路:二叉树的层序遍历,在打印一个节点的时候,要把他的子节点保存起来打印第一层要把第二层的节点保存起来, 打印第二层要把 ...

  7. 面试题23_从上往下打印二叉树

    题目描写叙述: 从上往下打印出二叉树的每一个节点.同层节点从左至右打印. 解题思路: 这道题考查二叉树的层次遍历. 对于二叉树的先序遍历.中序遍历.兴许遍历.我们都比較熟悉,用递归方法实现,代码也很e ...

  8. [剑指offer]面试题5:从尾到头打印链表

    面试题5:从尾到头打印链表 题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值. 链表结点定义如下: struct ListNode {int m_nKey;ListNode *m_pNex ...

  9. 剑指Offer面试题:4.从尾到头打印链表

    一 题目:从尾到头打印链表 题目:输入一个链表的头结点,从尾到头反过来打印每个结点的值. 代码实现 采用两种方法实现: (1) 不修改原列表,使用stack的方式实现 (2)修改原列表,对元列表逆序 ...

最新文章

  1. 提高CSDN阅读量。需要写出好文章。新技术的笔记!
  2. Ubuntu14.04 工作区设置
  3. Java调用 shell脚本阻塞
  4. 解决窗口属性兼容性问题的一些函数
  5. Bootstrap系列 -- 37. 基础导航样式
  6. 分布式与人工智能课程(part7)--两种绘图思路
  7. oracle oci.dll的作用,ASP.NET bin目录中的Oracle oci.dll无法删除/不起作用
  8. 应用架构的核心使命是什么?阿里高级技术专家这样说
  9. php 403 nginx,403nginx是什么
  10. Holer实现手机APP应用外网访问本地WEB应用
  11. android listview下拉刷新动画,android 安卓 listview 支持下拉刷新 上拉加载更多
  12. 【caffe-windows】 caffe-master 之图片转换成lmdb or leveldb
  13. 利用ambassador实现container跨主机连接
  14. 360c301路由器安装openwrt18.06usb打印服务器
  15. 代码弱鸡竟然在CSDN写烘焙博客
  16. Windows自带安卓模拟器;安装使用Hyper-V;好用的安卓模拟器;亚马逊应用商店;WSA;适用于Android的Windows系统;在Windows上安装apk;apk转exe;BIOS错误……
  17. 第八届蓝桥杯全国总决赛真题解析
  18. 什么是似然函数?是条件概率吗?
  19. 抖音小店在哪里登录?抖音店怎么运营?
  20. 如何设置计算机的网络参数,如何为计算机新手简单地设置路由器的基本参数

热门文章

  1. C++---之动态内存申请new
  2. 当卷积层后跟batch normalization层时为什么不要偏置b
  3. python 重命名文件出现乱码_下载的文件名总是「乱码」?这里有各平台的解决方法...
  4. 考研c语言复试常问问题,2018考研复试常问的十个问题及回答指导
  5. php發送郵件_PHP发送邮件类库PHPMailer的简单使用
  6. 正弦函数_傅里叶为什么会想到把函数展开为正弦波
  7. python3异步task_并发,异步编程_Python中的asyncio模块中的Future和Task的区别?,并发,异步编程,python,asyncio - phpStudy...
  8. anaconda和python有什么不一样_看着一样的胶带,价格为什么不一样?
  9. jdbc面试_JDBC面试问答
  10. java集合替换集合_Java集合–您必须知道的13件事