由先序和中序建立二叉树 + C语言代码

概述

描述:
给定一个先序(后序)和中序来建立一个二叉树,例如先序序列:ABDCEF,后序序列:BDAECF
建立一个二叉树
递归
先序遍历的第一个节点是根节点。在中序遍历的序列中,位于该节点左边的是左子树,位于该节点右边的是右子树。
如果左子树不为空,那么前序遍历的第二个节点就是左子树的根节点,否则就是右子树的根节点。对左右子树再分别重复上述步骤,可唯一确定一个二叉树。
(后序序列就要从后往前)

代码

#include <stdio.h>

struct TNode{
	char data;
	struct TNode* left;
	struct TNode* right;
};

TNode* piTree(char *pa, char *ia, int p1, int p2, int i1, int i2)
{
    int ia_mid;
    TNode *T;
    T=new TNode;
    T->data=pa[p1];
    T->left=T->right=NULL;
    if(p1>p2 || i1>i2)
    	return NULL;
    for(ia_mid=0;;ia_mid++){
    	if(pa[p1]==ia[ia_mid])
    		break;
	}//在中序序列找根节点 
	T->left = piTree(pa,ia,p1+1,p1+(ia_mid-i1),i1,ia_mid-1);
	T->right = piTree(pa,ia,p1+(ia_mid-i1)+1,p2,ia_mid+1,i2);
 	return T;
}

void PostTravel(TNode* T)
{	//后序序列打印
	if(T==NULL) return;
	if(T->left) PostTravel(T->left);
	if(T->right) PostTravel(T->right);
	printf("%c", T->data);
}

int main()
{
	char pre[100], in[100];
	int n; 					//用来保存序列长度
	TNode *T;				//用来保存二叉树的根
	printf("输入先序序列:\n");
	scanf("%s", pre);
	printf("输入中序序列:\n");
	scanf("%s", in);
	n=0; 
	while(pre[n]) n++;		//计算序列长度 
	T= piTree(pre, in, 0, n-1, 0, n-1);
	printf("后序序列:\n");
	PostTravel(T);			//打印后序序列 
    return 0;
}

运行结果示例:
在这里插入图片描述

  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值