码迷,mamicode.com
首页 > 其他好文 > 详细

nyoj Tree

时间:2015-08-06 20:34:44      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:



#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

标签:

原文地址:http://blog.csdn.net/bailuweishuang520/article/details/47321395

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!