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); /*访问根结点*/
}
}