练习编程6:数据结构与算法の非线性结构の二叉树的创建与遍历

自己学习数据结构的编程练习;
平台:MacOS Catalina
软件:Xcode
时间:10.2 mins

这棵树的结构为:
在这里插入图片描述

#include <stdio.h>
#include <malloc.h>

typedef struct BiTree
{
    char data;
    struct BiTree * pLBiTree;
    struct BiTree * pRBiTree;
}BiTree, *pBiTree;

pBiTree create_BiTree(void);
void Create_BinTree(pBiTree T);
void pre_traserse(pBiTree pB);
void middle_traserse(pBiTree pB);
void post_traserse(pBiTree pB);

int main(void)
{
    pBiTree BTree;
    BTree = create_BiTree();
    pre_traserse(BTree);
	printf("\n");
	middle_traserse(BTree);
	printf("\n");
	post_traserse(BTree);
	printf("\n");
    
    return 0;
}

//静态建立的,还可以使用动态建立(递归)
pBiTree create_BiTree(void)
{
    pBiTree pA = (pBiTree)malloc(sizeof(BiTree));
    pBiTree pB = (pBiTree)malloc(sizeof(BiTree));
    pBiTree pC = (pBiTree)malloc(sizeof(BiTree));
    pBiTree pD = (pBiTree)malloc(sizeof(BiTree));
    pBiTree pE = (pBiTree)malloc(sizeof(BiTree));
    pBiTree pF = (pBiTree)malloc(sizeof(BiTree));
    pBiTree pG = (pBiTree)malloc(sizeof(BiTree));
    
    pA->data = 'A';
	pB->data = 'B';
	pC->data = 'C';
	pD->data = 'D';
	pE->data = 'E';
	pF->data = 'F';
	pG->data = 'G';
	
	pA->pLBiTree = pB;
	pA->pRBiTree = pC;
	pB->pLBiTree = pD;
	pC->pLBiTree = pE;
	pC->pRBiTree = pF;
	pF->pLBiTree = pG;

	pB->pRBiTree = NULL;
	pD->pLBiTree = pD->pRBiTree = NULL;
	pE->pLBiTree = pE->pRBiTree = NULL;
	pG->pLBiTree = pG->pRBiTree = NULL;
	pF->pRBiTree = NULL;

	return pA;

}
//动态创建二叉树,输入:ABC##DE##F##GH##
void create_front_tree(Binary_tree *p)
{
    char ch;
    printf("input: ");
    scanf("%c\n", &ch);
    if(ch == '#')
    {
        *p = NULL;        //代替NULL
        return ;
    }
    else
    {
        *p = (Binary_tree) malloc(sizeof(TreeNode));
        if(!*p)
        {
            exit(-1);         //空间申请失败
        }
        (*p)->data = ch;
        create_front_tree(&((*p)->left_child));
        create_front_tree(&((*p)->right_child));
    }
}

void pre_traserse(pBiTree pB)
{
	if(NULL != pB)
	{
		printf("%c ",pB->data);
		if(NULL != pB->pLBiTree)
			pre_traserse(pB->pLBiTree);
		if(NULL != pB->pRBiTree)
			pre_traserse(pB->pRBiTree);
	}
}
void middle_traserse(pBiTree pB)
{
	if(NULL != pB)
	{
		
		if(NULL != pB->pLBiTree)
			middle_traserse(pB->pLBiTree);
		printf("%c ",pB->data);
		if(NULL != pB->pRBiTree)
			middle_traserse(pB->pRBiTree);
	}
}

void post_traserse(pBiTree pB)
{
	if(NULL != pB)
	{
		
		if(NULL != pB->pLBiTree)
			post_traserse(pB->pLBiTree);

		if(NULL != pB->pRBiTree)
			post_traserse(pB->pRBiTree);

		printf("%c ",pB->data);
	}
}

测试结果
A B D C E F G
D B A E C G F
D B E G F C A
Press any key to continue

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值