Le langage C détermine uniquement un arbre binaire en fonction de la précommande

Ce code fonctionne

#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;
}
Publié 57 articles originaux · loué 54 · visites 2331

Je suppose que tu aimes

Origine blog.csdn.net/September_C/article/details/105576312
conseillé
Classement