nyoj Tree
来源:互联网 发布:国外留学 美食 知乎 编辑:程序博客网 时间:2024/05/29 11:41
#include<cstdio>
#include<cstring>
#include<iostream>
#include<malloc.h>
using namespace std;
typedef struct Node
{
Node * lchild,*rchild;
char value;
} Tree;
void ReBuild(char *PreOrder,char *InOrder,int TreeLen,Tree** root)
{
Tree *p;
char *LeftEnd;
if(PreOrder==NULL||InOrder==NULL||root==NULL)//检查边界条件
{
return ;
}
p=(Tree *)malloc(sizeof(Tree));//获的前序遍历的第一个节点
p->value=*PreOrder;
p->lchild=p->rchild=NULL;
*root =p;
if(TreeLen==1)
return ;//一个节点直接结束
LeftEnd=InOrder;//LeftEnd得到先序遍历根节点的值
while(*LeftEnd!=*PreOrder)//在中序遍历中找到该点的位置
{
LeftEnd++;
}
//寻求左子树的长度
int LeftLen=0;
LeftLen=(int)(LeftEnd-InOrder);
int RightLen=0;
//寻求右子树的长度
RightLen=TreeLen-LeftLen-1;
if(LeftLen>0)//重建左子树
ReBuild(PreOrder+1,InOrder,LeftLen,&(p->lchild));
if(RightLen>0)//重建 右子树,递归
ReBuild(PreOrder +LeftLen+1,InOrder+LeftLen+1,RightLen,&(p->rchild));
}
void PostOrder(Tree *p)//二叉树建完之后进行后续遍历。
{
if(p!=NULL)
{
PostOrder(p->lchild);
PostOrder(p->rchild);
cout<<p->value;
}
}
int main()
{
char a[110],b[110];
Tree *p;
while(cin>>a>>b)
{
int len=strlen(a);
ReBuild(a,b,len,&p);
PostOrder(p);
cout<<endl;
}
return 0;
}
- NYOJ--Tree
- nyoj Tree
- nyoj-221-Tree
- tree(nyoj)
- nyoj 221-Tree
- NYOJ tree 先序中序求后序
- NYOJ 221 Tree
- NYOJ 题目221 Tree
- nyoj-221 Tree
- nyoj 221 Tree
- NYOJ-题目221 Tree
- nyoj 221 Tree 【已知前序中序求后序】
- nyoj 129 poj 1308 Is a tree
- NYOJ-221 Tree(前序中序推后序)
- NYOJ 221 Tree (二叉树遍历)
- NYOJ 679 The Weight of Tree 搜索+dp+邻接表
- HDU 1325 || NYOJ 129 || POJ 1308 Is It A Tree?
- NYOJ 211 tree(二叉树的遍历与创建)
- jsCoverage
- 对A轮的追逐变得越加狂热,当前距离互联网泡沫究竟有多近?
- sql server删除重复的数据保留一行
- glOrtho,glFrustum,gluPerspective的理解,很清楚
- H264编码中的I帧,B帧,P帧
- nyoj Tree
- 学习相关:构建maven spring mvc
- 深入了解qt的信号和槽
- The Other Two Trees
- MySQL 高可用架构在业务层面的分析研究
- lua 中删除table中的多个元素
- 创始人是否真的非要兼任CEO不可?
- iOS 第三课 podfile文件 makeToast第三方错误提示 正则NSPredicate
- 什么是 metadata (元数据)