实现二叉树的各种基本运算的算法代码
(一)创建二叉树
1. 二叉树的链表存储结构:
//定义二叉树的链表存储结构
typedef struct BiTNode
{
char data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
2.利用二叉树的链表存储结构,创建一棵二叉树
//根据二叉树的链表存储结构,创建一棵二叉树
BiTree CreateBiTree(BiTree T)
{
char c;
scanf(&c);
if(c=='#')
T=NULL;
else
{
T=(BiTree)malloc(sizeof(BiTNode)); // 产生根节点
T->data=c; // 生成根结点
T->lchild = CreateBiTree(T->lchild); // 构造左子树
T->rchild = CreateBiTree(T->rchild); // 构造右子树
}
return T;
}
(二)二叉树的遍历
1.先序遍历
// 先序遍历:根左右
void PreOrderTraverse(BiTree T)
{
if(T==NULL)
return;
printf('%c',T->data); // 访问根结点
PreOrderTraverse(T->lchild); // 遍历左子树
PreOrderTraverse(T->rchild); // 遍历右子树
}
2.中序遍历
// 中序遍历:左根右
void InOrderTraverse(BiTree T)
{
if(T==NULL)
return;
InOrderTraverse(T->lchild); // 遍历左子树
printf('%c',T->data); // 访问根结点
InOrderTraverse(T->rchild); // 遍历右子树
}
3.后序遍历
// 后序遍历:左右根
void PostOrderTraverse(BiTree T)
{
if(T==NULL)
return;
PostOrderTraverse(T->lchild); // 遍历左子树
PostOrderTraverse(T->rchild); // 遍历右子树
printf('%c',T->data); // 访问根结点
}
(三)二叉树的其他基本运算
1.计算二叉树的结点数
// 计算二叉树的结点数
int CountTreeNode(BiTree T)
{
if(T==NULL)
return 0; // 二叉树T为空时,结点数为0
else
return CountTreeNode(T->lchild)+CountTreeNode(T->rchild)+1;
}
2.计算二叉树的深度
// 计算二叉树的深度
int TreeDepth(BiTree T)
{
int depL, depR;
二叉树的基本性质 if(T==NULL)
return 0; // 二叉树T为空时,深度为0
else
{
depL = TreeDepth(T->lchild); // 左子树深度
depR = TreeDepth(T->rchild); // 右子树深度
if(depL > depR)
return depL+1;
else
return depR+1;
}
}。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论