专业课-数据结构(树与二叉树实验)

本文介绍了一种使用C语言创建二叉树并进行先序、中序和后序遍历的方法。通过递归的方式实现了遍历算法,并展示了如何从键盘输入先序序列来构建二叉树。最后给出了具体的测试数据及遍历结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【题目来源】:
数据结构-用C语言描述(耿国华第二版)P209页实习题1
实验内容:
建立一棵用二叉链表方式存储的二叉树,并对其进行遍历(先序、中序和后序),打印输出遍历结果。
【基本要求】:
从键盘接收输入先序序列,二叉链表作为存储结构,建立二叉树(以先序建立)并对其进行遍历(先序、中序、后序),然后将遍历结果打印输出。要求采用递归和非递归两种方法实现。
【测试数据】:
ABC[][]DE[]G[][]F[][][] ([]表示空格字符)
输出结果:先序序列为ABCDEFG
中序序列为CBEGDFA
后序序列为CGEFDBA

源代码

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
    
    typedef struct Node//结构体  
    {
    	char data;
    	struct Node *LChild;
    	struct Node *RChild;
    } BiTNode,*BiTree;
    
    void InitTree(BiTree *l)//初始化
    {
    *l= (BiTree)malloc(sizeof(BiTNode));
    (*l)->LChild = NULL;
    (*l)->RChild = NULL;
    }
    
    void CreateBiTree(BiTree *bt) //先序创建二叉树 
    {
    	char ch;
    	ch = getchar();
    	if (ch == ' ') *bt = NULL;
    	else
    	{
    		*bt = (BiTree)malloc(sizeof(BiTNode));
    		(*bt)->data = ch;
    		CreateBiTree(&((*bt)->LChild));
    		CreateBiTree(&((*bt)->RChild));
    	}
    }
    
    void PreOrder(BiTree root)//先序遍历 
    {
    	if (root != NULL)
    	{
    		printf("%c", root->data);
    		PreOrder(root->LChild);
    		PreOrder(root->RChild);
    	}
    }
    
    void InOrder(BiTree root)//中序遍历 
    {
    	if (root != NULL)
    	{
    		InOrder(root->LChild);
    		printf("%c", root->data);
    		InOrder(root->RChild);
    	}
    }
    
    void PostOrder(BiTree root)//后序遍历 
    {
    	if (root != NULL)
    	{
    		PostOrder(root->LChild);
    		PostOrder(root->RChild);
    		printf("%c", root->data);
    	}
    }
    
    int main()
    {
    
    	BiTree T;
    	InitTree(&T);
    	CreateBiTree(&T);
    	printf("先序序列为 ");
    	PreOrder(T);
    	printf("\n");
    	printf("中序序列为 ");
    	InOrder(T);
    	printf("\n");
    	printf("后序序列为 ");
    	PostOrder(T);
    	printf("\n");
    	system("pause");
    }

学习疑问:
1.在定义结点的结构体时,*BiTree代表什么?
2.为什么写作(BiTree *l)?
3.为什么写作(*l)=(BiTree)malloc(sizeof(BiNode))?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值