二叉树的应用
本节介绍二叉树的基本应用,包括求二叉树的叶结点数、总结点数、二叉树的深度等,重点介绍标识符树的应用。
二叉树的基本应用
1.统计二叉树叶子结点数
(1)基本思想。若二叉树结点的左子树和右子树都为空,则该结点为叶子结点。可先对全局变量count+1,然后依次递归统计T的左子树叶子结点数和T的右子树叶子结点数。
(2)具体算法如下。
void Leafnum(BT *T) //求二叉树的叶子结点数
{
if(T) //若二叉树不为空
if(T-> lchildNULL&&T-> rchildNULL)
{
count++; //统计叶子结点个数
Leafnum(T-> lchild); //递归统计T的左子树的叶子结点数
Leafnum(T-> rchild); //递归统计T的右子树的叶子结点数
}
}
2.求二叉树结点总数
(1)基本思想。若二叉树根结点不为空,则计数器count加1,然后依次递归统计T的左子树结点数和T的右子树结点数。
(2)具体算法如下。
void Nodenum(BT *T) //求二叉树总结点数
{
if(T) //如果二叉树不为空
{
count++; //count为统计结点个数的变量,初值为 0
Nodenum(T-> lchild); //递归统计T的左子树结点数
Nodenum(T-> rchild); //递归统计T的右子树结点数
}
}
3.求二叉树的深度
(1)基本思想。若二叉树为空,则返回0;否则,递归统计左子树的深度,然后递归统计右子树的深度,递归结束后,返回其中较大的一个深度值,即是二叉树的深度。
(2)具体算法如下。
int TreeDepth(BT *T) //求二叉树深度
{
int ldep,rdep; //定义两个整型变量,用于存放左、右子树的深度
if(TNULL) //若树空则返回 0
return 0;
else
{
ldep=TreeDepth(T-> lchild); //递归统计T的左子树深度
rdep=TreeDepth(T-> rchild); //递归统计T的右子树深度
if(ldep> rdep) //若左子树深度大于右子树,返回左子树深度加 1
return ldep+1;
else
return rdep+1; //否则,返回右子树深度加 1
}
}
4.查找数据元素
在以T为根结点指针的二叉树中查找数据元素x。查找成功时返回该结点的指针;查找失败时返回空指针。
(1)基本思想。先判断二叉树的根结点是否与x相等,若相等则返回,否则,分别在T->lchild为根结点指针的二叉树中递归查找数据元素x,以及在T->rchild为根结点指针的二叉树中递归查找数据元素x。
(2)具体算法如下。
BT *Search(BT *T,datatype x)
{
BT *p;
if(T! =NULL)
{
if(T-> datax) //根结点即为查找结点,直接返回根。否则,分别在左右子树中查找
return T;
p=Search(T-> lchild,x); //在T- > lchild为根结点的二叉树中递归查找数据元素x
if(p! =NULL) //如果找到,返回找到的结点p
return p;
else
return Search (T-> rchild,x);
}
else return NULL; //查找失败,返回空
}
数据结构-二叉树的应用学习
最新推荐文章于 2023-08-07 15:09:01 发布