C语言 根据前序中序唯一确定一棵二叉树

此代码可以正常运行

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef char TElemType;
#define N 100
typedef struct BiNode
{
    TElemType data;
    struct BiNode *lchild,*rchild;
}BiNode,*BiTree;

enum Status{ERROR,OK};
BiTree Create(int n, TElemType *pre, TElemType *mid)///前序中序建立二叉树
{
    if(n==0)
        return NULL;
    BiTree T;
    T = (BiNode *)malloc(sizeof(BiNode));
    T->data = pre[0];
	T->lchild=T->rchild=NULL;   //第一个结点为根
    int i;
    for(i=0;i<n;i++)
        if(pre[0] == mid[i])
            break;
    T->lchild = Create(i, pre+1,mid);
    T->rchild = Create(n-i-1, pre+i+1, mid+i+1);
 
    return T;
}
 

Status PostOrder(BiTree T)  //后序
{
	if(T==NULL)
		return OK;
	else
	{
		PostOrder(T->lchild);  //递归遍历左子树
		PostOrder(T->rchild);  //递归遍历右子树
		printf("%c  ",T->data);  //访问根节点
	}
}

//如果去掉输出语句,从递归的角度看,三种算法是完全相同的,
//或说这三种算法的访问路径是相同的,只是访问结点的时机不同。
//输出根的顺序不同
//时间效率:O(n) :每个结点只访问一次
//空间效率: O(n):栈占用的最大辅助空

int main()
{
    TElemType preNode[N];
	TElemType midNode[N];
	int n = 0;
	TElemType ch;
	BiTree bt=NULL;
	printf("请输入前序序列\n");
	while((ch = getchar())!='\n')
		preNode[n++] = ch;
	printf("请输入中序序列\n");
	n = 0;
	while((ch = getchar())!='\n')
		midNode[n++] = ch;
	bt= Create(n,preNode,midNode);  //n为元素个数
 
	printf("后序序列遍历结果\n");
	PostOrder(bt);
	
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值