数据结构算法—递归算法求二叉树的叶子结点(C语言)

数据结构算法—递归算法求二叉树的叶子结点(C语言)

遍历过程采用先序序列。
在构造二叉树时,直接输入二叉树的先序序列,我在注释中有例子。

#include<stdio.h>
#include<malloc.h>
struct node{
	char info;
	struct node *llink,*rlink;
};
typedef struct node NODE;
NODE *creat(){
	char x;
	NODE *p;
    scanf("%c",&x);
	printf("%c",x);
	if(x!='.'){//测试输入 ABD..EH...CF.I..G..       . 表示该结点无子树  也就是返回上一层递归 
		p=(NODE *)malloc(sizeof(NODE));
		p->info=x;
		p->llink=creat();
		p->rlink=creat();
	 }
	else
		p=NULL;
		return p;
}
int Countleaf(NODE *bt,int count){//计算叶子结点 
	if(bt!=NULL){//根节点不为空 
		if(bt->llink==NULL&&bt->rlink==NULL)//左右子树都为NULL 即该结点为叶子结点,count ++  
            count++;
        count=Countleaf(bt->llink,count);// 不为空,先去遍历左子树,再次调用Countleaf函数。 
        count=Countleaf(bt->rlink,count);
	}
	return count;
}
int main(){
	NODE *T;
	int count = 0;
	printf("PLease input a tree:\n");
	T=creat();
	printf("\n");
	count = Countleaf(T,count);
	printf("递归算法-->二叉树的叶子结点数为:%d",count);
	printf("\n");
}
运行结果:
PLease input a tree:
ABD..EH...CF.I..G..
ABD..EH...CF.I..G..
递归算法—>二叉树的叶子结点数为:4

--------------------------------
Process exited after 15.37 seconds with return value 0

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值