| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1295 人关注过本帖
标题:[求助]随机生成n个结点二叉树的算法
只看楼主 加入收藏
sonfly
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-8-5
收藏
 问题点数:0 回复次数:4 
[求助]随机生成n个结点二叉树的算法

片段如下:
struct BiTNode
{
int data;
BiTNode *left;
BiTNode *right;
};

BiTNode *Tree; //根指针
cin<<i;
srand(i); //指定随机数种子,相同的种子将产生相同的数据序列
rand();

BiTNode *Generate(int n) //n为树的结点数
{
if (n==0)
return NULL;

BiTNode *P = new BiTNode;
P->data = rand() % 999 + 1 ;//为什么要加1 ?

int nl=rand() % (n);

P->left = Generate(nl);
P->right = Generate(n-1-nl);
return P;
}
搞不懂递归何时退出? 关键是Generate(n-1-nl)是什么意思……死活不懂,望高手灌顶!

搜索更多相关主题的帖子: 二叉树 结点 BiTNode 算法 rand 
2007-09-22 12:28
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

P->data = rand() % 999 + 1 ;//为什么要加1 ?
保证生成的数在1-999之间.这个可能是题目的要求.
int nl=rand() % (n); //保证左子树个数不会超过总结点数.
P->left = Generate(nl);//左子树的结点个数
P->right = Generate(n-1-nl);//右子树结点个数当然是n-n1-1(其中1是根嘛)

递归退出就是在
if (n==0)
return NULL;


倚天照海花无数,流水高山心自知。
2007-09-22 13:31
zhif8610
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-10-30
收藏
得分:0 
2007-09-22 17:52
china25qd
Rank: 1
等 级:新手上路
帖 子:161
专家分:0
注 册:2007-9-6
收藏
得分:0 
P->data = rand() % 999 + 1 ;//为什么要加1 ?

因为是从0开始的


抱膝怀天下 闲坐观四海
2007-09-22 20:58
sonfly
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-8-5
收藏
得分:0 
谢谢大家 明白啦!
2007-09-23 10:18
快速回复:[求助]随机生成n个结点二叉树的算法
数据加载中...
 
   



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

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