PTA 重构二叉树
重构二叉树 (25 分)
给出两个字符串,分别表示二叉树的先序遍历(根、左子树、右子树)和中序遍历(左子树、根、右子树)的结果。
例如,对于下面的二叉树,先序遍历结果是DBACEGF,中序遍历结果是ABCDEFG。
假定二叉树的每个节点都用大写的字母标识,且对于同一棵二叉树,同一个字母不会用两次。现在请你根据给出的先序遍历和中序遍历,重构这棵二叉树。
输入格式:
输入包含一个或多个测试用例。每个测试用例一行,给出两个字符串,表示对二叉树进行先序遍历和中序遍历的结果。这两个字符串都是由大写字母组成(因此它们的长度不超过26)。
输出格式:
将每个测试用例转化为一棵二叉树,并在一行中输出树的后序遍历(左子树、右子树、根)的结果。
输入样例:
DBACEGF ABCDEFG
BCAD CBAD
输出样例:
ACBFGED
CDAB
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring> using namespace std; typedef struct node
{
char data;
struct node *lchild,*rchild;
}Tree; char a[],b[]; Tree *CreatTree(char *a,char *b,int r) //定义返回指针地址的函数
{
Tree *T;
for(int i=;i<r;i++)
if(a[]==b[i])
{
T=(Tree*)malloc(sizeof(Tree)); //记住要为新定义的指针开辟空间...
T->data=a[];
T->lchild=CreatTree(a+,b,i); //因为是左子树,所以第一个参数根节点的地址加1就行
//第二个参数的首地址不用变还是原来位置
//第三个参数就要发生改变了,长度就变成了在中序遍历数组中所找到的根节点的位置 T->rchild=CreatTree(a+i+,b+i+,r-i-); //同理,因为是右子树,所以第一个参数根节点还要多加个i
//第二个参数同上,首地址位置发生改变
//第三个参数就是当前的长度减去左子树的长度,再加上当前根节点,所以要多减个1 return T; //记住一点要返回指针的地址...切记切记
}
return NULL; //当前节点为空的时候返回NULL
} void PrintTree(Tree *T) //后序遍历输出此树
{
if(!T)
return;
PrintTree(T->lchild);
PrintTree(T->rchild);
printf("%c",T->data);
} int main()
{
while(cin>>a>>b)
{
Tree *T;
T=CreatTree(a,b,strlen(b)); //第一个参数是根节点的地址
PrintTree(T); //第二个参数是中序遍历数组的地址
printf("\n"); //第三个参数是中序遍历数组的长度
}
return ;
}
PTA 重构二叉树的更多相关文章
- 剑指offer——已知二叉树的先序和中序排列,重构二叉树
这是剑指offer中关于二叉树重构的一道题.题目原型为: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2, ...
- 剑指offer 04:重构二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
- 剑指offer重构二叉树 给出二叉树的前序和后序重构二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树. 假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4, ...
- PTA 求二叉树的深度
6-7 求二叉树的深度 (6 分) 本题要求实现一个函数,可返回二叉树的深度. 函数接口定义: int Depth(BiTree T); T是二叉树树根指针,函数Depth返回二叉树的深度,若树为 ...
- PTA 统计二叉树度为2的结点个数
6-4 统计二叉树度为2的结点个数 (11 分) 本题要求实现一个函数,可统计二叉树中度为2的结点个数. 函数接口定义: int NodeCount ( BiTree T); T是二叉树树根指针, ...
- PTA 统计二叉树度为1的结点个数
6-3 统计二叉树度为1的结点个数 (10 分) 本题要求实现一个函数,可统计二叉树中度为1的结点个数. 函数接口定义: int NodeCount ( BiTree T); T是二叉树树根指针, ...
- PTA 统计二叉树叶子结点个数
6-2 统计二叉树叶子结点个数 (10 分) 本题要求实现一个函数,可统计二叉树的叶子结点个数. 函数接口定义: int LeafCount ( BiTree T); T是二叉树树根指针,函数Le ...
- PTA 统计二叉树结点个数
6-1 统计二叉树结点个数 (10 分) 本题要求实现一个函数,可统计二叉树的结点个数. 函数接口定义: int NodeCount ( BiTree T); T是二叉树树根指针,函数NodeCo ...
- PTA 6-12 (二叉树的递归删除)
BinTree Insert( BinTree BST, ElementType X ) { if (BST==NULL) { BinTree tmp=(BinTree)malloc(sizeof(s ...
随机推荐
- 获取url传来的参数
//根据传递过来的参数name获取对应的值 function getParameter(name) { var reg = new RegExp("(^|&)" + nam ...
- JS的 delete操作符 删除对象属性
JS如何删除对象中的某一属性 var obj={ name: 'zhagnsan', age: 19 } delete obj.name //true typeof obj.name //undefi ...
- Hadoop 上Hive 的操作
数据dept表的准备: --创建dept表 CREATE TABLE dept( deptno int, dname string, loc string) ROW FORMAT DELIMITED ...
- Qt设置按钮为圆形
通过Qt 的样式表实现圆形按钮,其也可以实现圆角按钮,当然也可以使用其他的方式,比如说,通过派生按钮类使用绘图事件,进行一个图形的绘制,或者是通过自定义一个类,通过信号与槽的机制与绘图事件的配合也能实 ...
- Java实现文本中的关键字高亮,匹配所有长度
这个方法还不完整,后面想起来再看,直接放代码 public static String getHeightlightWord(String textWord, String key){ StringB ...
- Spring Boot WebFlux整合mongoDB
引入maven文件 <dependency> <groupId>org.springframework.boot</groupId> <artifactId& ...
- fastadmin 页面添加编辑日期时间
添加 <div class="form-group"> <label class="control-label col-xs-12 col-sm-2&q ...
- 9、nginx常用基础模块
1Nginx目录索引 ngx_http_autoindex_module模块处理以斜杠字符('/')结尾的请求(就是处理location /),并生成目录列表.当ngx_http_index_modu ...
- bisect:维护一个有序的列表
介绍 bisect模块实现了一个算法来向列表中插入元素,同时仍然保证列表有序 有序插入 import bisect ''' 可以使用bisect.insort向一个列表中插入元素 ''' values ...
- Java常见Exception类型及中文翻译
地址:http://rymden.nu/exceptions.html 翻译: java.lang ArithmeticException 你正在试图使用电脑解决一个自己解决不了的数学问题,请重新阅读 ...