统计二叉树中叶子结点数数据结构C语言,数据结构—计算二叉树叶子结点到根节点的路径,统计叶子结点个数...

源代码:#include

using namespace std;

#define MAXSIZE 30

typedef struct BT{

char data;

struct BT *lchild,*rchild;//表示建立一个struct BT类型的左右孩子指针变量,这样左右孩子指针只能指向struct BT类型//

}BT;//二叉树的定义,使用typedef后,BT等价于struct BT了,省事了//

void Creat(BT *T){ //先序建立二叉树,BT *T表示形式参数为一个BT类型(使用了Typedef,所以BT等价于struct BT)的T指针变量,用来接收上一级的左右孩子指针)//

char ch;

cin>>ch;

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

else{

T = new BT;//new分配内存过程为调用构造BT的函数,返回一个指向分配内存的首地址的指针//

T->data = ch;

Creat(T->lchild);

Creat(T->rchild);

}

}

int Num1(BT *T){ //统计度为1的节点的个数

if(T == NULL)return 0;

if(T->lchild == NULL&&T->rchild != NULL){

return Num1(T->rchild)+1;//若左孩子为空,右孩子非空,则将度为1 的只有右孩子的结点数加一//

}

else if(T->lchild != NULL&&T->rchild == NULL){

return Num1(T->lchild)+1;//若右孩子为空,左孩子非空,则将度为1的只有左孩子的结点数加一//

}

else{

return Num1(T->rchild)+Num1(T->lchild);

}

}

void Route(BT *T,char *path,int pathlen){ //输出二叉树中从每个叶子结点到根结点的路径

if(T == NULL){

return;

}//如果此结点为空,则返回//

if(T->lchild == NULL && T->rchild == NULL){

cout

for(int i = pathlen-1; i >= 0; i--){

cout

}//如果此结点的左右孩子都为空,则输出数组path的值//

else{

path[pathlen++] = T->data;

Route(T->lchild,path,pathlen);

Route(T->rchild,path,pathlen);//这里注意为什么要频繁的调用path数组和下标,这是因为保证了调用完左孩子的路径后保证了path为未调用之前的状态,如果使用全局变量,则调用完T->lchild之后path数组有冗余的上层数值,这样下面调用T->rchild时path数组还有“上级余孽”,这也是为什么不直接使用全局变量的原因//

}

}

int main(){

BT *tree;

char path[MAXSIZE];

cout<

Creat(tree);

cout<

cout<

Route(tree,path,-1);

}

学习笔记:

cd371cd6db373e399fcc2e2487cc3c63.png

bfe92b43bab1119d672026de5f31931d.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值