剑指offer-面试题23.从上往下打印二叉树
题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如输入图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.从上往下打印二叉树的更多相关文章
- 剑指Offer:面试题23——从上往下打印二叉树(java实现)
问题描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: 按照层次遍历的方法,使用队列辅助. 1.将根结点加入队列. 2.循环出队,打印当前元素,若该结点有左子树,则将其加入队列,若 ...
- 剑指Offer - 九度1523 - 从上往下打印二叉树
剑指Offer - 九度1523 - 从上往下打印二叉树2013-12-01 00:35 题目描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 输入: 输入可能包含多个测试样例,输入以E ...
- 剑指offer(22)从上往下打印二叉树
题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 题目分析 从下打印就是按层次打印,其实也就是树的广度遍历. 一般来说树的广度遍历用队列,利用先进先出的特点来保存之前节点,并操作之前的 ...
- 【剑指offer】不分行从上到下打印二叉树,C++实现(层序遍历)
原创文章,转载请注明出处! 本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 1.题目 从上往下打印出二叉树的每个节点,同层节点从左至右打印.例如: 图 不分行从上往下按层打印二叉 ...
- 【剑指Offer】22、从上往下打印二叉树
题目描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 解题思路: 本题实际上就是二叉树的层次遍历,深度遍历可以用递归或者栈,而层次遍历很明显应该使用队列.同样我们可以通过 ...
- 剑指offer_面试题_从上往下打印二叉树
题目:从上往下打印出二叉树的每一个结点.同一层的结点依照从左到右的顺序打印.比如输入图4.5中的二叉树.则依次打印出8.6.10.5.7.9.11. 8 / \ 6 10 / \ ...
- 《剑指offer》面试题23 从上往下打印二叉树 Java版
注意层序遍历的时候对每一层的处理方式可能不同,这里把每一层的元素保存进一个List中了,那么就需要记录每一层的数量. public List<List<Integer>> se ...
- 面试题23从上到下打印二叉树+queue操作
//本题思路就是层次遍历二叉树,使用一个队列来模拟过程 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *ri ...
- C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解
剑指offer 面试题23:从上往下打印二叉树 参与人数:4853 时间限制:1秒 空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...
随机推荐
- unix c 11
多线程(thread) 操作系统支持多进程,进程内部使用多线程. 进程是 重量级的,拥有自己 独立的内存空间. 线程是 轻量级的,不需要拥有自己 独立的内存空间,线程的内存空间:1 ...
- Inorder Successor in BST 解答
Question Given a binary search tree and a node in it, find the in-order successor of that node in th ...
- Maximum Subarray / Best Time To Buy And Sell Stock 与 prefixNum
这两个系列的题目其实是同一套题,可以互相转换. 首先我们定义一个数组: prefixSum (前序和数组) Given nums: [1, 2, -2, 3] prefixSum: [0, 1, 3, ...
- 第01讲- Android背景知识
第01讲Android背景知识 Android是基于Linux系统 Android系统框图 : 第一.操作系统层(OS) 第二.各种库(Libraries)和Android 运行环境(RunTime) ...
- kafka与Spring的集成
准备工作 kafka版本:kafka_2.10-0.10.1.0 spring版本:spring4.3 配置文件 pom文件配置(也可以直接下载jar包) Kafka和spring集成的支持类库,sp ...
- 浅谈jquery关于select框的取值和赋值
浅谈jquery关于select框的取值和赋值 jQuery("#select_id").change(function(){}); // 1.为Select添加事件,当选择其 ...
- 概率dp ZOJ 3640
Help Me Escape Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Submit ...
- windows-JDK环境变量设置
JAVA_HOME=C:\Program Files\Java\jdk1.6.0_43;CLASS_PATH=.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;p ...
- mycat源码分析
http://www.cnblogs.com/fernandolee24/p/5196367.html
- ASP.NET网站与ASP.NET应用程序的区别
我们使用VS做ASP.NET的时候,可以选择新建ASP.NET应用程序,同时也可以新建ASP.NET网站,两者有什么具体区别呢?今天真是很幸运,比别人多上了老师一节课,讲的是这两者之间的一些区别.我学 ...