重建二叉树

二叉树的节点为:

struct BiTNode
{
	TElemType data;
	struct BiTNode *leftchild,*rightchild;
};

创建节点统一由Buynode() 函数完成:

BiTNode * Buynode()
{
	BiTNode *s=new BiTNode();
	if(s == NULL)
	{
		exit(1);
	}
	memset(s,0,sizeof(BiTNode));
	return s;
}

一,由前序和中序遍历的字符串创建二叉树,返回二叉树头指针。

BiTNode * PreInCreateTree(char *s1,char *s2,int n)	//n标识s2的长度
{
	if(n == 0)
	{
		return NULL;
	}
	int i=0;
	while(*s1 != s2[i])
	{
		++i;
	}
	BiTNode *h=Buynode();
	h->data=*s1;
	h->leftchild=PreInCreateTree(s1+1,s2,i);
	h->rightchild=PreInCreateTree(s1+i+1,s2+i+1,n-i-1);
	return h;
}
二,由中序和后序遍历的字符串创建二叉树,返回二叉树头指针。

BiTNode * InPostCreateTree(char *s1,char *s2,int n)
{
	if(n == 0)
	{
		return NULL;
	}
	int i=n-1;
	while(s2[n-1] != s1[i])
	{
		--i;
	}
	BiTNode *h=Buynode();
	h->data=s2[n-1];
	h->leftchild=InPostCreateTree(s1,s2,i);
	h->rightchild=InPostCreateTree(s1+i+1,s2+i,n-i-1);
	return h;
}
 

//时间原因在这里不做实现方法的解释

//测试用例  

char *s1="ABCDEFGH";
char *s2="CBEDFAGH";
char *s3="CEFDBHGA";


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值