学习二叉树重建

看算法入门经典的二叉树重建,觉得递归真是神级技能,看了好久还是想不出该如何写出这个递归,似懂非懂,囫囵吞枣,暂且放博客记下。

#include<iostream>
#include<string>
#include<cstring>
using namespace std;

void build(int n,char *s1,char*s2,char*s)
{
	if(n <= 0) return ;
	int p = strchr(s2,s1[0]) - s2;  //strchr返回一个指针,指针相减得到所找字符的位置 ,找不到的话返回NULL。 
	build(p,s1+1,s2,s);  //递归构造左子树的后续遍历 
	build(n-p-1,s1+p+1,s2+p+1,s+p);  //递归构造右子树的后续遍历 
	s[n-1]=s1[0];  //把根结点添加到最后 
}
int main()
{
	char a[100],b[100];
	while(cin>>a>>b)
	{
		char *a1 = strchr(a,'B');
		char *a2 = strchr(a,'C');
		int p = a2-a1;
		cout<<p<<"*************"<<endl;
	    char s[100];
		int t = strlen(a);
		build(t,a,b,s);
		s[t]='\0'; 
		cout<<s<<endl;
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值