【剑指Offer面试编程题】题目1523:从上往下打印二叉树--九度OJ
- 题目描述:
-
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
- 输入:
-
输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行一个整数n(1<=n<=1000, :n代表将要输入的二叉树元素的个数(节点从1开始编号)。接下来一行有n个数字,代表第i个二叉树节点的元素的值。接下来有n行,每行有一个字母Ci。
Ci=’d’表示第i个节点有两子孩子,紧接着是左孩子编号和右孩子编号。
Ci=’l’表示第i个节点有一个左孩子,紧接着是左孩子的编号。
Ci=’r’表示第i个节点有一个右孩子,紧接着是右孩子的编号。
Ci=’z’表示第i个节点没有子孩子。
- 输出:
-
对应每个测试案例,
按照从上之下,从左至右打印出二叉树节点的值。
样例输入:
7
8 6 5 7 10 9 11
d 2 5
d 3 4
z
z
d 6 7
z
z
样例输出:
8 6 10 5 7 9 11
【解题思路】这道题目应该一眼就看看出是树的层序遍历,看出来之后也就没有什么可以说的了。注意首先用一定的数据结构保存树,然后利用set数据结构寻找出根节点。然后就是利用队列进行层序遍历。
AC code:
#include <cstdio>
#include <vector>
#include <set>
#include <queue>
using namespace std; struct tr
{
int val,lc,rc;
}; int main()
{
int n,r,l;
char cc[2];
while(scanf("%d",&n)!=EOF)
{
tr rt;
rt.lc=rt.rc=0;
vector<tr> vect(n+1);
set<int> setidx;
queue<int> qu;
for(int i=1;i<=n;++i)
{
scanf("%d",&rt.val);
vect[i]=rt;
setidx.insert(i);
}
for(int i=1;i<=n;++i)
{
scanf("%s",cc);
switch(cc[0]){
case 'd':
scanf("%d%d",&l,&r);
vect[i].lc=l;
vect[i].rc=r;
setidx.erase(l);
setidx.erase(r);
break;
case 'l':
scanf("%d",&l);
vect[i].lc=l;
setidx.erase(l);
break;
case 'r':
scanf("%d",&r);
vect[i].rc=r;
setidx.erase(r);
break;
case 'z':
break;
default:
break;
}
}
printf("%d",vect[*setidx.begin()].val);
if(vect[*setidx.begin()].lc!=0)
qu.push(vect[*setidx.begin()].lc);
if(vect[*setidx.begin()].rc!=0)
qu.push(vect[*setidx.begin()].rc);
while(!qu.empty())
{
int ft=qu.front();
printf(" %d",vect[ft].val);
if(vect[ft].lc!=0)
qu.push(vect[ft].lc);
if(vect[ft].rc!=0)
qu.push(vect[ft].rc);
qu.pop();
}
printf("\n");
}
return 0;
}
/**************************************************************
Problem: 1523
User: huo_yao
Language: C++
Result: Accepted
Time:0 ms
Memory:1056 kb
****************************************************************/题目链接:http://ac.jobdu.com/problem.php?pid=1523
九度-剑指Offer习题全套答案下载:http://download.csdn.net/detail/huoyaotl123/8276299
【剑指Offer面试编程题】题目1523:从上往下打印二叉树--九度OJ的更多相关文章
- (剑指Offer)面试题23:从上到下打印二叉树
题目: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: 很明显,这是一个广度优先遍历. 需要一个队列容器来保存结点,具体操作: 1.将根结点压入队列中,并打印根结点:如果根结点有子结点 ...
- 【剑指offer】面试题23:从上往下打印二叉树
题目: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: bfs,队列. 注意,队列最后不要忘了pop(). 代码: /* struct TreeNode { int val; stru ...
- 《剑指offer》— JavaScript(22)从上往下打印二叉树
从上往下打印二叉树 题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路 借助两个辅助队列,一个用来存放结点,一个用来存放结点值: 先将根节点加入到队列中,然后遍历队列中的元素,遍历 ...
- 【剑指Offer】面试题32 - III. 从上到下打印二叉树 III
题目 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推. 例如: 给定二叉树: [3,9,20,nu ...
- 【剑指Offer】面试题32 - II. 从上到下打印二叉树 II
题目 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回 ...
- 【剑指Offer】面试题32 - I. 从上到下打印二叉树
题目 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回: [3 ...
- 《剑指offer》面试题32 - I. 从上到下打印二叉树
问题描述 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回 ...
- 《剑指offer》面试题32 - II. 从上到下打印二叉树 II
问题描述 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 ...
- 《剑指offer》面试题32 - III. 从上到下打印二叉树 III
问题描述 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推. 例如: 给定二叉树: [3,9,20, ...
随机推荐
- django之反向解析和命名空间
背景:当我们页面中存放的请求路径与url文件中的url一致时,如果url改了是不是所有的请求路径都要跟着改?显然不现实,这里我们就要用到反向解析. 如下图所示,输入url后会跳转到登录页面,输入用户名 ...
- python二维数组的创建
话不多说,代码伺候 m = [[]*]*3 #创建一个3行5列的二维数组 m[][]= print(m) 输出结果为: 分析: m = [[0]*5]*3只是指向三个空列表的引用. 创建一个二维数组的 ...
- 【笔记】单步跟踪法与UPX的脱壳理解
用PEiD查壳 UPX v0.89.6 - v1.02 / v1.05 - v1.22 这个是入门的壳,只是一个简单的压缩壳 用Stud_PE查看PE文件头信息 ...
- linux chrome rpm chrome浏览器下载(ver 63-70)
我的github chrome下载地址:https://github.com/chen1932390299/python 国内开源的资源 chrome下载centos 的:https://www.ch ...
- LeetCode练题——53. Maximum Subarray
1.题目 53. Maximum Subarray——Easy Given an integer array nums, find the contiguous subarray (containin ...
- Spring boot+Thymeleaf传参跳转
$.ajax(): $.ajax({ type: "get", url:"/public/inform", async: true, data: detailJ ...
- DL4J之CNN对今日头条文本分类
一.数据集介绍 数据来源:今日头条客户端 数据格式如下: 6551700932705387022_!_101_!_news_culture_!_京城最值得你来场文化之旅的博物馆_!_保利集团,马未都, ...
- JAVA web课堂测试1
1登录账号:要求由6到12位字母.数字.下划线组成,只有字母可以开头:(1分)2登录密码:要求显示“• ”或“*”表示输入位数,密码要求八位以上字母.数字组成.(1分)3性别:要求用单选框或下拉框实现 ...
- org.springframework.web.multipart.MultipartException: The current request is not a multipart request
今天做图片上传的碰到这个问题,查找原因是html请求的方式问题.from中涉及到图片上传的就要用post提交方式.否则就会报这个错误.如果已经是post的提交方式了还有这个错...还有两种解决方法. ...
- CAN数据格式-BLF
欢迎关注<汽车软件技术>公众号,回复关键字获取资料. Vector工具录制的数据,一般有ASC和BLF两种格式,本文介绍ASC. 1.BLF定义 BLF(binary logging fo ...