西安交大朱站立数据结构——使用C语言》头文件系列——二叉树
本文为二叉链存储结构的二叉树操作实现,实现了二叉树的定义、插入数据、删除数据、撤销以及二叉树的打印、前序遍历、中序遍历、后序遍历等。本项目工程包含2个头文件(BiTree.h、BiTreeTraverse.h)和一个源文件(BiTree.cpp)。
头文件1,,,,,,,,,,,,,,,,BiTree.h
typedef,,,,,,,,struct,,,,,,,,Node
{
DataType,,,,,,,,data;//数据域
struct,,,,,,,,Node,,,,,,,,*leftChild;//左子树指针
struct,,,,,,,,Node,,,,,,,,*rightChild;//右子树指针
}BiTreeNode;//结点的结构体定义
/*初始化创建二叉树的头结点*/
void,,,,,,,,Initiate(BiTreeNode,,,,,,,,**root)
{
*root=(BiTreeNode,,,,,,,,*)malloc(sizeof(BiTreeNode));
(*root)->leftChild=NULL;
(*root)->rightChild=NULL;
}
/*若当前结点curr非空,在curr的左子树插入元素之为x的新结点*/
/*原curr所指结点的左子树成为新插入结点的左子树*/
/*插入成功则返回新插入结点的指针,否则返回空指针*/
BiTreeNode,,,,,,,,*InsertLeftNode(BiTreeNode,,,,,,,,*curr,DataType,,,,,,,,x)
{
BiTreeNode,,,,,,,,*s,*t;
if(curr==NULL),,,,,,,,return,,,,,,,,NULL;
t=curr->leftChild;/*保留原curr所指结点的左子树指针*/
s=(BiTreeNode,,,,,,,,*)malloc(sizeof(BiTreeNode));
s->data=x;
s->leftChild=t;/*新插入结点的左子树为原curr的左子树*/
s->rightChild=NULL;
curr->leftChild=s;/*新结点成为curr的左子树*/
return,,,,,,,,curr->leftChild;/*返回新插入结点的指针*/
}
/*若当前结点curr非空,在curr的右子树插入元素之为x的新结点*/
/*原curr所指结点的右子树成为新插入结点的左子树*/
/*插入成功则返回新插入结点的指针,否则返回空指针*/
BiTreeNode,,,,,,,,*InsertRightNode(BiTreeNode,,,,,,,,*curr,DataType,,,,,,,,x)
{
BiTreeNode,,,,,,,,*s,*t;
if(curr==NULL),,,,,,,,return,,,,,,,,NULL;
t=curr->rightChild;/*保留原curr所指结点的右子树指针*/
s=(BiTreeNode,,,,,,,,*)malloc(sizeof(BiTreeNode));
s->data=x;
s->rightChild=t;/*新插入结点的右子树为原curr的左子树*/
s->leftChild=NULL;
curr->rightChild=s;/*新结点成为curr的右子树*/
return,,,,,,,,curr->rightChild;/*返回新插入结点的指针*/
}
void,,,,,,,,Destory(BiTreeNode,,,,,,,,**root)
{//二叉树撤销操作
if((*root)!=NULL,,,,,,,,&&,,,,,,,,(*root)->leftChild!=NULL)
Destory(&(*root)->leftChild);
if((*root)!=NULL,,,,,,,,&&,,,,,,,,(*root)->rightChild!=NULL)
Destory(&(*root)->rightChild);
free(*root);
}
/*若curr非空,删除curr所在结点的左子树*/
/*删除成功则返回删除结点的双亲指针,否则返回空*/
BiTreeNode,,,,,,,,*DeleteLeftTree(BiTreeNode,,,,,,,,*curr)
{
if(curr==NULL||curr->leftChild==NULL),,,,,,,,return,,,,,,,,NULL;
Destory(&curr->leftChil