题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如输入图4.5中

的二叉树,则依次打印出8、6、10、5、7、9、11二叉树结点的定义如下:

 struct BinaryTreeNode
{
int m_nValue;
BinaryTreeNode* m_pLeft;
BinaryTreeNode* m_pRight;
};

我们以如下二叉树为例:

                /  \

              / \  / \
                  

这道题实际上二叉树层次遍历方法:

解题步骤如下:

1.设置一个deque双端队列,将根节点加入队列

2.首先从队头取出根节点,输出根节点的数据值。同时将根节点的左右子结点加入队列,此时队列里面的节点为 6、10

3.从队头取出节点6,同时加入节点6的左右节点到队列尾,此时队列节点10、5、7

4.从队头取出节点10,同时加入节点10的左右节点到对尾,此时队列节点为5、7、9、11

5.此时取出队头节点5,节点5没有左右子节点则输出不必加队列

5。重复直到队列中元素全部取出后,层次遍历便完成了。

代码实现如下:

 #include <iostream>
#include <deque>
using namespace std; struct BinaryTreeNode
{
int m_nValue;
BinaryTreeNode* m_pLeft;
BinaryTreeNode* m_pRight;
}; void CreateTree(BinaryTreeNode** Root)
{
int data;
cin>>data;
if(data==)
{
*Root=NULL;
return;
}
else
{
*Root=(BinaryTreeNode*)malloc(sizeof(BinaryTreeNode));
(*Root)->m_nValue=data;
CreateTree(&((*Root)->m_pLeft));
CreateTree(&((*Root)->m_pRight));
}
} void PreOrder(BinaryTreeNode* Root)
{
if(Root==NULL)
return; PreOrder(Root->m_pLeft);
cout<<Root->m_nValue<<endl;
PreOrder(Root->m_pRight);
} void LevelOrder(BinaryTreeNode* Root)
{
if(Root==NULL)
return; deque<BinaryTreeNode*> D; D.push_back(Root); while(!D.empty())
{
BinaryTreeNode* TempNode=D.front();
D.pop_front();
cout<<TempNode->m_nValue<<","; if(TempNode->m_pLeft!=NULL)
{
D.push_back(TempNode->m_pLeft);
}
if(TempNode->m_pRight!=NULL)
{
D.push_back(TempNode->m_pRight);
}
}
} int main()
{
BinaryTreeNode* root;
cout<<"Please input the tree node data(0-exit):\n";
CreateTree(&root);
cout<<"The PreOrder of Binary Tree:\n";
PreOrder(root);
cout<<endl;
cout<<"The LevelOrder Of Binary Tree: ";
LevelOrder(root);
cout<<endl;
return ;
}

运行截图:

 

剑指offer-面试题23.从上往下打印二叉树的更多相关文章

  1. 剑指Offer:面试题23——从上往下打印二叉树(java实现)

    问题描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: 按照层次遍历的方法,使用队列辅助. 1.将根结点加入队列. 2.循环出队,打印当前元素,若该结点有左子树,则将其加入队列,若 ...

  2. 剑指Offer - 九度1523 - 从上往下打印二叉树

    剑指Offer - 九度1523 - 从上往下打印二叉树2013-12-01 00:35 题目描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 输入: 输入可能包含多个测试样例,输入以E ...

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

    题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 题目分析 从下打印就是按层次打印,其实也就是树的广度遍历. 一般来说树的广度遍历用队列,利用先进先出的特点来保存之前节点,并操作之前的 ...

  4. 【剑指offer】不分行从上到下打印二叉树,C++实现(层序遍历)

    原创文章,转载请注明出处! 本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 1.题目 从上往下打印出二叉树的每个节点,同层节点从左至右打印.例如: 图  不分行从上往下按层打印二叉 ...

  5. 【剑指Offer】22、从上往下打印二叉树

      题目描述:   从上往下打印出二叉树的每个节点,同层节点从左至右打印.   解题思路:   本题实际上就是二叉树的层次遍历,深度遍历可以用递归或者栈,而层次遍历很明显应该使用队列.同样我们可以通过 ...

  6. 剑指offer_面试题_从上往下打印二叉树

    题目:从上往下打印出二叉树的每一个结点.同一层的结点依照从左到右的顺序打印.比如输入图4.5中的二叉树.则依次打印出8.6.10.5.7.9.11. 8 /     \ 6     10 /   \ ...

  7. 《剑指offer》面试题23 从上往下打印二叉树 Java版

    注意层序遍历的时候对每一层的处理方式可能不同,这里把每一层的元素保存进一个List中了,那么就需要记录每一层的数量. public List<List<Integer>> se ...

  8. 面试题23从上到下打印二叉树+queue操作

    //本题思路就是层次遍历二叉树,使用一个队列来模拟过程 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *ri ...

  9. C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解

    剑指offer  面试题23:从上往下打印二叉树 参与人数:4853  时间限制:1秒  空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...

随机推荐

  1. STL中istream_iterator和ostream_iterator的基本用法

    标准程序库定义有供输入及输出用的iostream iterator类,称为istream_iterator和ostream_iterator,分别支持单一型别的元素读取和写入.使用这两个iterato ...

  2. jdbc连接数据库工具类

    import java.lang.reflect.Field; import java.sql.Connection; import java.sql.DriverManager; import ja ...

  3. devStack for Openstack dev Env

    devstack是一套用来给开发人员快速部署Openstack开发环境的脚本,其实对于整个安装过程没有什么好说的,因为脚本写的很完善,全程无脑式安装也没什么大问题,但是因为公司里的网络环境不给力,我的 ...

  4. 【转】Android NDK开发入门实例

    写这个,目的就是记录一下我自己的NDK是怎么入门的.便于以后查看,而不会忘了又用搜索引擎一顿乱搜.然后希望能够帮助刚学的人入门. 先转一段别人说的话:“NDK全称:Native Development ...

  5. BackgroundWorker用法

    BackgroundWorker主要用来提供后台运算服务(防止用户前台无响应等待),并提供服务进度的类: 代码如下: BackgroundWorker bgw = new BackgroundWork ...

  6. Boost线程库学习笔记

    一.创建一个线程 创建线程 boost::thread myThread(threadFun); 需要注意的是:参数可以是函数对象或者函数指针.并且这个函数无参数,并返回void类型. 当一个thre ...

  7. java获取当前系统毫秒,纳秒

    //获取当前系统毫秒 System.out.println(System.currentTimeMillis()); //获取当前系统纳秒 System.out.println(System.nano ...

  8. css3 在线编辑工具 连兼容都写好了

    http://www.css3maker.com/index.html

  9. Javascript页面跳转与浏览器兼容

    用<meta>标签实现的定时跳转: <meta http-equiv="refresh" content="5 url=http://www.baidu ...

  10. 查找mysql数据库文件的存放位置

    在mysql数据库中,有时候并不是很容易找出mysql数据库文件data的存放位置吗,这时就可以使用mysql自带的命令行工具进行查询. 具体命令如下:show variables like '%da ...