二叉树遍历算法的应用

本文详细介绍了二叉树遍历算法在创建、复制、计算深度、节点总数及叶子节点数等方面的应用。通过示例代码展示了如何实现这些操作,包括先序遍历序列建立二叉树、复制二叉树、计算二叉树深度、节点数量和叶子节点数量的方法。

目录

一、二叉树遍历算法的应用——二叉树的创建

二、二叉树遍历算法的应用——复制二叉树

三、二叉树遍历算法的应用——计算二叉树的深度

四、二叉树遍历算法的应用——计算二叉树节点总数

五、二叉树遍历算法的应用——计算二叉树叶子节点数


一、二叉树遍历算法的应用——二叉树的创建

1、按先序遍历序列建立二叉树的二叉链表

例如:已知先序序列为:ABCDEGF,按照二叉树先序方式建立可能会建立出两种不同的二叉树,如下图所示:

因此为了避免这种情况,我们可以补充一些空结点,补充空结点过后这两棵树接完全不一样了,因为补充的空结点的位置不一样。可用#号表示空结点。

2、对下图所示二叉树按下列顺序读入字符:ABC##DE#G##F###

            

算法描述:

Status CreateBiTree(BiTree &T){

scanf(&ch); //cin>>ch;

if (ch== "#")T=NULL;

else {

if (!(T = (BiTNode *)malloc(sizeof(BiTNode)))) exit(OVERFLOW); //T=new BiTNode;

T->data=ch; // 生成根结点

CreateBiTree(T->lchild);    //构造左子树
CreateBiTree(T->rchild);    //构造右子树
}
return OK;

}//CreateBiTree

二、二叉树遍历算法的应用——复制二叉树

1、算法思路

如果是空树,递归结束;

否则,申请新结点空间,复制根结点

➢递归复制左子树

➢递归复制右子树

2、算法描述:

int Copy(BiTree T, BiTree &NewT){
if(T==NULL) {                //如果是空树返回0
NewT=NULL; return 0;
}
else {

NewT=new BiTNode;

NewT->data=T->data;

Copy(T->lChild, NewT->lchild);

Copy(T->rChild, NewT->rchild);

}
    }

三、二叉树遍历算法的应用——计算二叉树的深度

1、算法思路

如果是空树,则深度为0;  否则,递归计算左子树的深度记为m,递归计算右子树的深度记为n,二叉树的深度则为m与n的较大者加1。

2、算法描述

int Depth( BiTree T){

if(T==NULL)   return 0; //如果是空树返回0
else {

m=Depth(T->lChild);

n=Depth(T->rChild);

if(m>n) 
return (m+1);

else return(n+1);

   }
}

四、二叉树遍历算法的应用——计算二叉树节点总数

1、算法思路

如果是空树,则结点个数为0;

否则,结点个数为左子树的结点个数+右子树的结点个数再+1。

2、算法描述

int NodeCount(BiTree T){

if(T == NULL )

return 0;

else

return NodeCount(T-> lchild)+NodeCount(T->rchild)+ 1;

}

五、二叉树遍历算法的应用——计算二叉树叶子节点数

1、算法思路

如果是空树,则叶子结点个数为0;

否则,为左子树的叶子结点个数+右子树的叶子结点个数。

2、算法描述

int LeadCount(BiTree T){

if(T==NULL)           //如果是空树返回0

return 0;

if (T->Ichild==NULL && T->rchild == NULL)

return 1; //如果是叶子结点返回1

else

return LeafCount(T->Ichild)+LeafCount(T->rchild);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜深人静码代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值