数据结构—递归算法求二叉树的叶子结点(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

上一篇:数据结构篇(三):


下一篇:AlertManager警报通知 使用webhook 钉钉机器人