由前序和中序遍历构建一颗二叉树

本文介绍了一种根据前序和中序遍历构造二叉树的算法,并提供了详细的C++实现代码。该算法存在特殊情况未考虑的问题,适合用于教学和考试场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个算法本身是存在问题的,不细究。等大四我再写一个完善的算法。考试的时候可以写这个算法,思路没错,但是有种特殊情况这个算法没考虑。大笑
#include<iostream>
#include<malloc.h>
using namespace std;
struct Betree{
	char c;
	Betree *lchild,*rchild;
};
char fore[100],mid[100];
void preorder(Betree *t)
{
	if(t==NULL)
		return;
	else {
		cout<<t->c<<" ";
		preorder(t->lchild);
		preorder(t->rchild);
	}
}
Betree* creatBt(int i,int j,int x,int y)
{
	if(i>j||x>y)
		return NULL;
	else {
		Betree* t=(Betree*)malloc(sizeof(Betree));
		t->c=fore[i];
		int L,k;
		k=x;
		while(fore[i]!=mid[k])
			k=k+1;
		L=k-x;
		if(k==x)
			t->lchild=NULL;
		else t->lchild=creatBt(i+1,i+L,x,k-1);
		if(k==y)
			t->rchild=NULL;
		else t->rchild=creatBt(i+L+1,j,x+L+1,y);
		return t;
	}
}
int main()
{
	int n,i;
	while(1)
	{
		cin>>n;
		Betree* tree=0;
		for(i=1;i<=n;i++)
			cin>>fore[i];
		for(i=1;i<=n;i++)
			cin>>mid[i];
		tree=creatBt(1,n,1,n);
		preorder(tree);
		cout<<endl;
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值