从NYOJ1063 学习二叉树的建立与遍历
来源:互联网 发布:网商银行助力淘宝贷款 编辑:程序博客网 时间:2024/06/07 09:18
生活的烦恼
时间限制:1000 ms | 内存限制:65535 KB
难度:2
- 描述
生活的暑假刚集训开始,他要决心学好字典树,二叉树,线段树和各种树,但生活在OJ上刷题的时候就遇到了一个特别烦恼的问题。那当然就是他最喜欢的二二叉树咯!题目是这样的:给你一颗非空的二叉树,然后再给你一个整数n,让生活输出这颗二叉树的第n(n>0且n<=树的深度)层,出题者为了给生活降低难度,要求两个输出数据之间用'~'隔开。看来我们的出题人很有爱啊!
- 输入
- 第一行输入一个数N,表示有N组测试数据。接下来N行,每行一个字符串,用'#'表示为空的节点,树的结束标志为'@'。'@'后仅有一个空格,空格后为一个数字,表示生活要输出的二叉树的第几层!
- 输出
- 每行输出一个字符串,表示给出二叉树的第n层!
- 样例输入
21 2 # # 3 # # @ 15 7 3 # # # 4 # # @ 3
- 样例输出
13
- 提示
- 5 第一层
/ \
7 4 第二层
/
3 第三层 - 来源
- 爱生活
- 上传者
- TCM_张鹏题目描述如上:主要考查二叉树的前序遍历,一开始没有理解二叉树的新建过程:现在结合题目分析一下二叉树的新建过程,具体解决代码如下:
#include<iostream>#include<stdio.h>#include<queue>using namespace std;typedef struct node{ char data; struct node *leftChild; struct node *rightChild;}BiTreeNode,*BiTree;void createBiTree(BiTree &T){ char c; cin >>c; if(c =='#'){ T = NULL; }else { T = new BiTreeNode; T->data=c; createBiTree(T->leftChild); createBiTree(T->rightChild); }}queue<char>s;void PrintDepNum(BiTree T,int l,int dep){ if(T == NULL){ return; } if(l==dep){ s.push(T->data); return; } PrintDepNum(T->leftChild,l+1,dep); PrintDepNum(T->rightChild,l+1,dep); return;}int main(){ int n,dep; cin>>n; while(n--){ BiTree T; char temp; createBiTree(T); //递归建立二叉树 cin>>temp>>dep; //二叉树建立结束后输入@符号和s深度 PrintDepNum(T,1,dep); //根据深度,来递归把第dep层的数据放入队列中 int len=s.size(); if(len>1){ for(int i=0;i<len;i++){ if(i==0){ cout<<s.front(); }else{ cout<<"~"<<s.front(); } s.pop(); } cout<<endl; }else { cout<<s.front()<<endl; s.pop(); } } return 0;}
结合题目分析递归创建二叉树的过程:5 7 3 # # # 4 # # @ 3
我们拿上面的输入来说一开始输入5,执行递归1. 输入5然后执行 首先执行对应createBiTree(T->leftChild);
2. 输入7 然后执行,然后调用createBiTree(T->leftChild);
3.输入3 然后执行,然后调用createBiTree(T->leftChild);
4. 输入 # 执行,该节点为空节点 返回,执行 第3步对应的createBiTree(T->rightChild); 创建右节点
5. 输入 #执行,该节点为空节点,返回,执行 第 2步对应createBiTree(T->rightChild); 创建右节点
6. 输入 #执行,该节点为空节点,返回,执行 第 1步对应的createBiTree(T->rightChild); 创建右节点
7. 输入 4执行,然后调用createBiTree(T->leftChild);
8. 输入 #执行,该节点为空节点,返回,执行 第 7步对应的createBiTree(T->rightChild); 创建右节点
9. 输入 #执行,该节点为空节点,返回 创建二叉树结束接下来就是执行递归PrintDepNum(BiTree T,int l,int dep)函数将第dep层的值放入队列中,然后进行输出。参考文章:用递归方法建立二叉树以及遍历二叉树 http://blog.csdn.net/stpeace/article/details/8138303二叉树递归建立: http://blog.csdn.net/naipp/article/details/51897865
阅读全文
1 0
- 从NYOJ1063 学习二叉树的建立与遍历
- NYOJ1063 生活的烦恼(二叉树的建立)
- 二叉树的建立与遍历
- c++二叉树的建立与遍历
- 二叉树的建立与先序中序后序遍历
- C++二叉树的建立与遍历
- 二叉树的建立与遍历
- 二叉树的遍历与建立
- 二叉树的建立与遍历
- 二叉树的建立与遍历
- 二叉树的建立与遍历
- 数据结构 二叉树的建立与遍历
- 二叉树的建立与遍历
- 二叉树的建立 与 遍历
- 二叉树的建立与遍历
- 二叉树的建立与遍历
- 二叉树的建立与遍历
- 线索二叉树的建立与遍历
- 剑指offer中 与树、二叉树有关的编程练习题 Java编码
- 邻接表
- [编程题]学英语
- poj 1260
- 《计算机视觉-一种现代方法(第2版)》读书笔记三:早期视觉(一幅图像)
- 从NYOJ1063 学习二叉树的建立与遍历
- java String延续之StringBuffer,StringBuilder
- elasticsearch外场分片找回-UNASSIGNED
- bilibili开源弹幕库UML类图
- 线程与进程
- Android 子线程跟新UI的方式
- C++中指针常量和常量指针的区别
- flex布局的兼容性问题
- Intellij IDEA +Mac 上传项目到GitHub