剑指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 ...
随机推荐
- POJ3669(Meteor Shower)(bfs求最短路)
Meteor Shower Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12642 Accepted: 3414 De ...
- errno的基本用法
error是一个包含在 perror()和strerrot()函数可以把errno的值转化为有意义的字符输出. #include <stdio.h> #include <stdlib ...
- cookielib模块基础学习
# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' import cookielib #主要用于处理http客户端的co ...
- 自定义 Layer 属性的动画
默认情况下,CALayer 及其子类的绝大部分标准属性都可以执行动画,无论是添加一个 CAAnimation 到 Layer(显式动画),亦或是为属性指定一个动作然后修改它(隐式动画). 但有时候 ...
- 怎么实现类似星星闪烁的效果(box-shadow)
有时候设计希望我们能够在页面实现类似星星闪烁的效果,如图: 我的解决办法是用box-shadow: html <div class="star04 active-blink" ...
- 初学jquery遇见的两个小问题!
<body> <div id="divtest">div的内容</div> <div id="default&quo ...
- BOM 窗体相关属性以及页面可见区域的获取方式
1 在IE Safari Oper Chrome 都提供了screenLeft和screenTop属性: screenLeft : 相对于屏幕左边的距离 screenTop : 相对于屏幕上边的距离 ...
- JS截取字符串:slice(),substring()和substr()
var string='abcdefg' 1.slice() string.slice(startLocation [, endLocation]) ps1:2个参数可以为负数,若参数值为负数,则将该 ...
- GO语言基础
Go语言开发 一.Linux下搭建Go开发环境 首先下载Go语言的开发安装包,不管是在官方网站或者国内的Golang镜像都是可以的,注意区分64位和32位的安装包. 下载完安装包之后tar zxvf进 ...
- CSS3前缀
我们经常会遇到写的有些css3属性会在不同的浏览器下呈现不兼容的情况,那是因为浏览器内核不同而导致的兼容性问题. 首先我们需要先了解一下目前的几种现代浏览器的内核,主流内容主要有Mozilla(熟悉的 ...