注册 登录
编程论坛 C++教室

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

sonfly 发布于 2007-09-22 12:28, 1297 次点击

片段如下:
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)是什么意思……死活不懂,望高手灌顶!

4 回复
#2
nuciewth2007-09-22 13:31

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
zhif86102007-09-22 17:52
#4
china25qd2007-09-22 20:58
P->data = rand() % 999 + 1 ;//为什么要加1 ?

因为是从0开始的

#5
sonfly2007-09-23 10:18
谢谢大家 明白啦!
1