已知两种序列,建立二叉树

1.已知前序和中序

node* pre_create(int prel,int prer,int inl,int inr)
{
	if(prel>prer) return NULL;
	node *root=new node;
	root->data=pre[prel];
	int temp;
	for(int i=inl;i<=inr;i++)
	{
		if(in[i]==pre[0])
		{
			temp=i;
			break;
		}
	}
	root->lchild=pre_create(prel+1,prel+temp-inl,inl,temp-1);
	root->rchild=pre_create(prel+temp-inl+1,prer,temp+1,inr);
	return root;
}

2.已知后序与中序

node* post_create(int postl,int postr,int inl,int inr)
{
	if(postl>postr) return NULL;
	node *root=new node;
	root->data=post[postr];
	int temp;
	for(int i=inl;i<=inr;i++)
	{
		if(in[i]==post[postr])
		{
			temp=i;
			break;
		}
	}
	root->lchild=post_create(postl,postl+temp-inl,inl,temp-1);
	root->rchild=post_create(postl+temp-inl+1,prer-1,temp+1,inr);
	return root;
}

3.已知层次与中序

//层次和中序序列构建二叉树:边输入数据边插入节点 
void creat(node* &root,int val){  
    if(!root){
        root=new node;
		root->data=val;
		root->lchild=root->rchild=NULL;
        return;
    }
    //找到层次遍历该值在中序序列里的位置k 
    int k;
    for(k=0;k<n;k++)
	{
        if(inorder[k]==val) break;
    }
    //找到根节点在中序序列里的位置 
    int u;
    for(u=0;u<n;u++)
	{
        if(inorder[u]==root->data) break;
    }
    //要插入的节点是在根节点的右侧(右子树插入) 
    if(u<k) creat(root->rchild,val);
    else creat(root->lchild,val);//左侧插入 
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值