设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 534|回复: 4
打印 上一主题 下一主题

[求助]随机生成n个结点二叉树的算法

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-3 01:25:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
片段如下:
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)是什么意思……死活不懂,望高手灌顶!
2#
发表于 2009-11-3 01:25:18 | 只看该作者
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;
回复 支持 反对

使用道具 举报

3#
发表于 2009-11-3 01:25:33 | 只看该作者
P->data = rand() % 999 + 1 ;//为什么要加1 ?
因为是从0开始的
回复 支持 反对

使用道具 举报

4#
发表于 2009-11-3 01:25:34 | 只看该作者
谢谢大家 明白啦!
回复 支持 反对

使用道具 举报

5#
发表于 2009-11-4 06:05:08 | 只看该作者
偶的天啊!这是什么样的贴子呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-19 07:49 , Processed in 0.106258 second(s), 12 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表