7-1 二叉树的基本操作

 

7-1 二叉树的基本操作

请编程序,使用链式存储结构,实现二叉树的创建、销毁、插入、删除、遍历、打印等基本操作。 【基本要求】

(1) 使用链表存储二叉树结点,数据元素类型为整型数据。

(2) 程序可以手动输入二叉树元素,完成构建二叉链表树的过程

(3) 每次二叉树的操作完成后,需要按照树状打印二叉树。

(4) 实现二叉树的以下功能:遍历操作可以提供先序遍历、中序遍历、后序遍历三种方式。

函数接口定义:

数据类型定义:
typedef char DataType;

typedef struct Node
{
    DataType data;
    struct Node *LChild;
    struct Node *RChild;
}BiTNode, *BiTree;

需要完成的接口:
/*前序遍历*/
void PreOrder(BiTree root);
void InOrder(BiTree root);
void PostOrder(BiTree root);

裁判测试程序样例:

在这里给出函数被调用进行测试的例子。例如:
#include <stdio.h>
#include <malloc.h>

typedef char DataType;

typedef struct Node
{
    DataType data;
    struct Node *LChild;
    struct Node *RChild;
}BiTNode, *BiTree;

void CreateBiTree(BiTree *bt);
void PreOrder(BiTree root);
void InOrder(BiTree root);
void PostOrder(BiTree root);
void Visit(char ch);

int main()
{
    BiTree T;

    CreateBiTree(&T);
    PreOrder(T);
    printf("\n"); 
    InOrder(T);
    printf("\n"); 
    PostOrder(T);
    printf("\n"); 

    getchar();
}

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 Visit(char ch)
{
    printf("%c",ch);
}

/* 请在这里填写答案 */
void PreOrder(BiTree root)
{
}
void InOrder(BiTree root)
{
}
void PostOrder(BiTree root)
{
}

输入样例:

在这里给出一组输入。例如:

AB..CD..E..

输出样例:

在这里给出相应的输出。例如:

ABCDE
BADCE
BDECA

 接口实现:

void  PreOrder(BiTree root) 
/*先序遍历二叉树, root为指向二叉树(或某一子树)根结点的指针*/
{
	if (root!=NULL)
	{
		Visit(root ->data);  /*访问根结点*/
		PreOrder(root ->LChild);  /*先序遍历左子树*/
		PreOrder(root ->RChild);  /*先序遍历右子树*/
	}
}

void  InOrder(BiTree root)  
/*中序遍历二叉树, root为指向二叉树(或某一子树)根结点的指针*/
{
	if (root!=NULL)
	{
		InOrder(root ->LChild);   /*中序遍历左子树*/
		Visit(root ->data);        /*访问根结点*/
		InOrder(root ->RChild);   /*中序遍历右子树*/
	}
}

void  PostOrder(BiTree root)  
/* 后序遍历二叉树,root为指向二叉树(或某一子树)根结点的指针*/
{
	if(root!=NULL)
	{
		PostOrder(root ->LChild); /*后序遍历左子树*/
		PostOrder(root ->RChild); /*后序遍历右子树*/
		Visit(root ->data);       /*访问根结点*/
	}
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值