剑指OFFER之从上往下打印二叉树(九度OJ1523)
题目描述:
-
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
- 输入:
-
输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行一个整数n(1<=n<=1000, :n代表将要输入的二叉树元素的个数(节点从1开始编号)。接下来一行有n个数字,代表第i个二叉树节点的元素的值。接下来有n行,每行有一个字母Ci。
Ci=’d’表示第i个节点有两子孩子,紧接着是左孩子编号和右孩子编号。
Ci=’l’表示第i个节点有一个左孩子,紧接着是左孩子的编号。
Ci=’r’表示第i个节点有一个右孩子,紧接着是右孩子的编号。
Ci=’z’表示第i个节点没有子孩子。
- 输出:
-
对应每个测试案例,
按照从上之下,从左至右打印出二叉树节点的值。
- 样例输入:
d
d
z
z
d
z
z
- 样例输出:
解题思路:
很经典的广度优先算法,没什么说的了。
算法思想:
1 扫描最顶层的树节点,把它的孩子节点放入队列。
2 每次扫描队列队头节点,仍把它的孩子加入到队中,并按照先左孩子,再右孩子的顺序,这样保证一层的左右顺序。
3 直到队列为空。
//main()中的代码
findTree(a,n,);
while(begin_q != end_q){
findTree(a,n,Quene[begin_q++]);
} //扫描函数
void findTree(treeArr *a,int n,int j){
if(j<=n){
result[top_result++]=a->arr[j].num;
}
if(a->arr[j].lchild != ){
Quene[end_q++] = a->arr[j].lchild;
}
if(a->arr[j].rchild != ){
Quene[end_q++] = a->arr[j].rchild;
}
}
全部代码:
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#define MAXSIZE 1005
typedef struct treenode{
int num;
int lchild;
int rchild;
}Tree;
typedef struct treearr{
struct treenode arr[MAXSIZE];
}treeArr; int Quene[MAXSIZE]={};
int begin_q,end_q;
int result[MAXSIZE]={};
int top_result; void findTree(treeArr *a,int n,int j); int main(){
int n,i;
char c;
int n1,n2;
while(scanf("%d",&n)!=EOF && n>= && n<=){
treeArr *a = (treeArr *)malloc(sizeof(treeArr)); memset(&Quene,,sizeof(int)*MAXSIZE);
memset(&result,,sizeof(int)*MAXSIZE); begin_q=;
end_q = ;
top_result = ; for(i=;i<MAXSIZE;i++){
a->arr[i].num = ;
a->arr[i].lchild = ;
a->arr[i].rchild = ;
}
for(i=;i<=n;i++){
scanf("%d",&a->arr[i].num);
}
for(i=;i<=n;i++){
scanf("\n%c",&c);
if(c == 'd'){
scanf("%d %d",&n1,&n2);
a->arr[i].lchild = n1;
a->arr[i].rchild = n2;
}else if(c == 'l'){
scanf("%d",&n1);
a->arr[i].lchild = n1;
}else if(c == 'r'){
scanf("%d",&n1);
a->arr[i].rchild = n1;
}else{ }
}
findTree(a,n,);
while(begin_q != end_q){
//printf("findtree --- begin_q %d end_q %d\n",begin_q,end_q ); findTree(a,n,Quene[begin_q++]);
}
for(i=;i<n-;i++){
printf("%d ", result[i]);
}
printf("%d\n", result[n-]);
}
return ;
} void findTree(treeArr *a,int n,int j){
if(j<=n){
result[top_result++]=a->arr[j].num;
}
if(a->arr[j].lchild != ){
Quene[end_q++] = a->arr[j].lchild;
}
if(a->arr[j].rchild != ){
Quene[end_q++] = a->arr[j].rchild;
}
}
/**************************************************************
Problem: 1523
User: xhalo
Language: C
Result: Accepted
Time:0 ms
Memory:920 kb
****************************************************************/
剑指OFFER之从上往下打印二叉树(九度OJ1523)的更多相关文章
- 《剑指offer》从上往下打印二叉树
本题来自<剑指offer> 从上往下打印二叉树 题目: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: 队列的思想. 先将根节点加入,当取该节点时候,依次将左右子树加入,直 ...
- 【剑指Offer】从上往下打印二叉树 解题报告(Python)
[剑指Offer]从上往下打印二叉树 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...
- 【Java】 剑指offer(32) 从上往下打印二叉树
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 (一)从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺 ...
- 剑指Offer 22. 从上往下打印二叉树 (二叉树)
题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 题目地址 https://www.nowcoder.com/practice/7fe2212963db4790b57431d9ed25 ...
- 【剑指offer】从上向下打印二叉树
转载请注明出处:http://blog.csdn.net/ns_code/article/details/26089165 剑指offer上的第23题,实际上就是考察二叉树的层序遍历,详细思想能够參考 ...
- Go语言实现:【剑指offer】从上往下打印二叉树
该题目来源于牛客网<剑指offer>专题. 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 不需分层,一维数组. Go语言实现: /** * Definition for a bi ...
- 剑指offer系列20--从上到下打印二叉树
* 20 [题目]从上往下打印出二叉树的每个节点,同层节点从左至右打印. * [思路]从根结点开始,先保存结点,再看根结点的左右结点有没有值. * 有,就将左右值放到集合中: * 根节点输出后,打印根 ...
- 剑指offer:从上往下打印二叉树
题目描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 解题思路: 实际就是二叉树的中序遍历问题.之前在leetcode刷过类似题目. 利用队列完成即可. 代码: /* struct Tr ...
- 【剑指offer】从上往下打印二叉树
一.题目: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 二.思路: 用队列,用根节点初始化队列,然后依次从队列中取出节点,先把当前节点输出,并把左右子树分别放入队列,直到队列为空.欧了. ...
随机推荐
- 188. Best Time to Buy and Sell Stock IV
题目: 链接: 题解: 测试: Reference:
- dup和dup2函数以及管道的实现
疑问:管道应该不是这样实现的,因为这要求修改程序的代码 dup和dup2也是两个非常有用的调用,它们的作用都是用来复制一个文件的描述符.它们经常用来重定向进程的stdin.stdout和stderr. ...
- How to change data dir of mysql?
# 1 copy orgin data dir of mysql to new one cp -R /var/lib/mysql /mysqldata chown mysql:mysql -R /my ...
- 【HDOJ】1699 The comment in cpp
注意测试数据12/*hduacm// abcd结果是1/*hduacm// ABCD /* 1699 */ #include <iostream> #include <sstream ...
- sublime text格式化插件
sublime text 软件其实是自带格式化插件的,但是它默认的格式化插件,不太好用,且没有快捷键(虽然自己可以设置). 其默认的格式化是在 Edit -> Line -> Re ...
- Hibernate中的query.setFirstResult(),query.setMaxResults();
一.query.scroll()和query.setFirstResult(),query.setMaxResults();这两种方法都可以取到一定范围内的数据,用来数据分页显示.那么两者区别,以及两 ...
- [原]Unity3D深入浅出 - 导航网格自动寻路(Navigation Mesh)
NavMesh(导航网格)是3D游戏世界中用于实现动态物体自动寻路的一种技术,将游戏中复杂的结构组织关系简化为带有一定信息的网格,在这些网格的基础上通过一系列的计算来实现自动寻路..导航时,只需要给导 ...
- js 动态计算折扣后总价格
<script type="text/javascript"> <!---计算折扣后的总价格---> function outtotalprice(i) { ...
- 8.11-8.16:usaco
summary:57 bzoj1741:裸二分图最大匹配 #include<cstdio> #include<cstring> #include<iostream> ...
- 西南科技大学第十届ACM程序设计竞赛题解
A.德州扑克 B. 我恨11(1089) 问题描述 11是一个孤独的数字,小明十分讨厌这个数字,因此如果哪个数字中出现了11或者该数字是11的倍数,他同样讨厌这个数字.现在问题来了,在闭区间[L,R] ...