| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2256 人关注过本帖
标题:求教一个算法题。二叉树叶子结点。。
只看楼主 加入收藏
sohueyou
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-7-20
收藏
 问题点数:0 回复次数:5 
求教一个算法题。二叉树叶子结点。。
求教一个算法题!!!!!!!。求二叉树叶子结点数..(具体是叶子数还是结点数,我搞也不清,,考试的题目接是这样的)
下面是老师给的算法,我老看不懂.
int leaf (Bitree,T,int count)
{if(T)
{leaf (T->lchild,count); /*计算左子树的接点树*/
if( (T->lchild==NULL,)&&(T->rchild=NULL) )
count++;
leaf(T->rchlid,count);
if ( (T->lchild==NULL,)&&(T->rchild=NULL) )
count++;
}
ruture count;
}


为什么 "leaf (T->lchild,count)"这句话就能算出左或右子树的接点数呢??到底是什么意思啊!
能给容易懂的算法吗!!!
搜索更多相关主题的帖子: 算法题 叉树叶 结点 count leaf 
2006-08-13 15:57
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
程序求的是叶子节点的个数.用递归求解,依次向下求解左子树和右子树,直到遇到叶子接点(即叶子的lchild==NULL&&T->rchild==NULL)count++.

对不礼貌的女生收钱......
2006-08-13 19:15
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 

各种遍历都可以...

int bianli1(struct btnode *t)
{
static int i;
if (t)
{if(t->lchile==0&&t->rchild==0) i++;
bianli1(t->lchild);
bianli1(t->rchild);
}
return i;
}

随便写写..不知道对不对,好象差不多

[此贴子已经被作者于2006-8-13 20:18:02编辑过]


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-08-13 20:16
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

#include "Stdio.h"
#include "Conio.h"
typedef struct btnode
{
int num ;
struct btnode *lchild,*rchild ;
}
BTNode ;
typedef struct btree
{
struct btnode *ROOT ;
}
BTree ;
void creatBT(BTree*bt)
{
bt->ROOT=NULL ;
}
void makeBT(BTree*btree,int number,BTree*lt,BTree*rt)
{
BTNode *bt=(BTNode *)malloc(sizeof(BTNode));
bt->num=number;
bt->lchild=lt->ROOT;
bt->rchild=rt->ROOT;
lt->ROOT=rt->ROOT=NULL ;
btree->ROOT=bt ;
}
void leaf(BTNode *T,int *count)
{
if(T)
{
leaf(T->lchild,count);
if((T->lchild==NULL)&&(T->rchild==NULL))
(*count)++;
leaf(T->rchild,count);
if((T->lchild==NULL)&&(T->rchild==NULL))
(*count)++;
}
}

int main(void)
{
BTree a,b,c,d ;
int num=0;
creatBT(&a);
creatBT(&b);
creatBT(&c);
creatBT(&d);
makeBT(&b,2,&d,&d);
makeBT(&c,3,&d,&d);
makeBT(&a,1,&d,&d);
leaf(a.ROOT,&num);
printf("%d",num);
getch();
return 0 ;
}

楼主您的程序仍有问题,刚才没看清,上面的程序是我改后针对您的那断程序测试的,您再看下有错误没,
您的错误在于:函数形参count在传递的过程中始终是以传值的形式,这会导致错误的计算结果,应该改成传址的形式。


对不礼貌的女生收钱......
2006-08-13 21:32
sohueyou
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-7-20
收藏
得分:0 

谢谢大家教我,我懂了啊,,,!!4楼的好强哦!

2006-08-14 09:10
luori446
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-8-13
收藏
得分:0 
你们都好强啊
2006-08-14 10:06
快速回复:求教一个算法题。二叉树叶子结点。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016944 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved