二叉树习题整理(一)

求二叉树的叶子结点个数

分析

这个题目很简单,我想到了两个思路

  • 1、跑一遍二叉树的先序遍历,每个结点判断是否有左孩子和右孩子,若都没有Count+1
  • 2、利用递归的思想,每个结点都进行同样的判断:判断是否有左孩子或右孩子,若都没有Count+1,若有则针对左右孩子递归调用

1的代码段

#define MAX_NODE 50;
int SearchLeavesNode(BTNode *T){
BTNode *stack[MAX_NODE],*p=T,*q;
int top=0,Count=0;
if(T==NULL){
	printf("Empty");
}
else{
	do{
		if(p->Lchild==NULL&&p->Rchild==NULL)
			Count++;
		//下是先序遍历
		q=p->Rchild;
		if(q!=null){
			//入栈
			stack[++top]=q;
		}
		p=p->Lchild;
		if(p==NULL){
			//弹栈
			p=stack[top];
			top--;
		}
	}while(p!=NULL);
}
	return Count;
}

2的代码段

int SearchLeavesNode(BTNode *T,Count){
if(T!=NULL){
 if(T->Lchild==NULL&&T->Rchild==NULL){
 	Count++;
 Count=SearchLeavesNode(T->Lchild,Count);
 Count=SearchLeavesNode(T->Rchild,Count);
 }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值