pat--还原二叉树--根据后序中序输出先序
来源:互联网 发布:iphone5s没有4g网络 编辑:程序博客网 时间:2024/05/24 04:04
还原二叉树 (25分)
根据后序和中序遍历输出先序遍历 (25分)
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
输入格式:
输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。
输出格式:
输出为一个整数,即该二叉树的高度。
输入样例:
9ABDFGHIECFDHGIBEAC
输出样例:
5
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;typedef struct Tree{ //树的节点 char data;struct Tree *lchild;struct Tree *rchild;}treenode,*tree;tree t = NULL;void xianzhong(char x[],char z[],int size,tree &tmp){ ///根据先序中序构造二叉树 if(size == 0) return; ///注意引用的使用 int index = 0;tmp = (tree)malloc(sizeof(treenode)); ///需要为节点分配空间 tmp->data = *x; ///先序的子序列的第一个元素是其根节点 tmp->lchild = NULL; ///注意这里的初始化很重要 tmp->rchild = NULL; while(index < size){ ///每次找到先序的根节点的位置 if(*(z+index) == *x) break;index++;}xianzhong(x+1,z,index,tmp->lchild); ///构造左孩子 xianzhong(x+1+index,z+index+1,size-index-1,tmp->rchild); ///构造右孩子 }void print(tree t){ //先序输出,调试时使用 if(t != NULL){printf("%d ",t->data);print(t->lchild);print(t->rchild);}}int high(tree t){ ///计算树的深度 if(!t) return 0; int lh = high(t->lchild); ///递归找到叶子,然后从叶子节点一层一层往上数 int rh = high(t->rchild);if(lh > rh) return ++lh; ///那边高度高就在那边加1 return ++rh;}int main(int argc, char *argv[]) {int n;scanf("%d",&n);char xianxu[55]; ///先序序列 char zhongxu[55]; ///中序序列 scanf("%s%s",xianxu,zhongxu);xianzhong(xianxu,zhongxu,n,t);printf("%d\n",high(t));return 0;}
本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果。
输入格式:
第一行给出正整数N(≤30),是树中结点的个数。随后两行,每行给出N个整数,分别对应后序遍历和中序遍历结果,数字间以空格分隔。题目保证输入正确对应一棵二叉树。
输出格式:
在一行中输出Preorder:
以及该树的先序遍历结果。数字间有1个空格,行末不得有多余空格。
输入样例:
72 3 1 5 7 6 41 2 3 4 5 6 7
输出样例:
Preorder: 4 1 3 2 6 5 7
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;int xian[35]; ///定义先序序列 int k = 0; ///给先序计数 void houzhong(int h[],int z[],int size){if(size <= 0) return;int temp = *(h+size-1); ///先序的根节点在后序的最后一个位置上 xian[k++] = temp; int index = 0;while(index < size){ ///找到根节点在中序中的位置 if(*(z+index) == temp) break;index++;}houzhong(h,z,index);houzhong(h+index,z+index+1,size-index-1);}int main(int argc, char *argv[]) {int n;scanf("%d",&n);int hou[35];int zhong[35];for(int i = 0; i < n; ++i) scanf("%d",&hou[i]);for(int i = 0; i < n; ++i) scanf("%d",&zhong[i]);houzhong(hou,zhong,n);printf("Preorder:");for(int i = 0; i < n; ++i) printf(" %d",xian[i]);printf("\n");return 0;}
0 0
- pat--还原二叉树--根据后序中序输出先序
- 根据二叉树的先序和中序遍历还原二叉树
- uva699(根据先序还原树)
- 根据先序和中序还原(重建)一个二叉树
- 根据二叉树的先序序列和中序序列还原二叉树并打印后序序列
- 【二叉树】 根据先序和中序遍历输出后序遍历
- 根据先序、中序、后序中的两者还原二叉树——递归函数和Csharp泛型
- 根据序列还原二叉树
- 根据二叉树的先序遍历建立二叉树
- 根据二叉树前序、中序遍历还原二叉树
- 二叉树的还原(先序+中序)
- (c++ 递归)先序 中序 还原二叉树
- 由先序和中序还原二叉树
- 算法进化历程之“根据二叉树的先序和中序序列输出后序序列”
- 根据先序遍历和中序遍历得出二叉树。最终以后序遍历的形式输出。
- 已知二叉树的先序(前序)遍历及中序遍历,还原该二叉树并输出其后续遍历
- 二叉树:根据二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列
- 用凹入表输出先序二叉树-按先中后顺序输出
- 并发和竞态(Linux设备驱动程序)
- 安装《炉石传说》过程中遇到的问题及解决方法
- 前端后台数据交互小知识
- [安卓开发] 使用回车键或输入法的回车键 进行确认搜索
- android开发之Fragment 的生命周期及使用方法详解
- pat--还原二叉树--根据后序中序输出先序
- 秒杀性能优化实践总结
- js用数组实现级联列表
- Java自动装拆箱boxing与unboxing
- CodeChef PALPROB Palindromeness
- iOS中 按钮和标题完美各种排列/完美教程 韩俊强的博客
- 抽象类
- java集合-EnumMap与EnumSet
- poj2083