void createbtree(btreenode *&bt)
{
char item;
cin>>item;
if(item=='@') bt=NULL;
else {
bt=new btreenode;
bt->data=item;a
createbtree(bt->lchild);
createbtree(bt->rchild);
}
问一下bt->lchild它把这个值传给bt,但是bt->lchild里面没有值,只有随即值,它是把随即值传给bt吗???还有bt->lchild如果产生随即值的话,那么只要每产生一个节点,bt->lchild里就放着随即值,那么那些随即值会不会重复???
这随机值你不必担心,因为在createbtree()内又createbtree(bt->lchild);和createbtree(bt->rchild);,内部的bt=new btreenode或者bt=NULL就给父节点的lchild和rchild赋植了.
如果是VC,未初始化的变量一律有初值0xCC,其他的编译器有些是随机有些是0,是否重复没有什么意义,因为你不可能故意去利用这些随机值的.
bt作为一个指针的引用类型传入函数时相当于一个指针的指针,他指向调用者已经分配出来的一个指针,或者是根节点,或者是叶节点。进入函数后就对这个指针指向的根节点或者叶节点赋值了,如果输入的是'@'就赋NULL,否则就是新创建的节点。并且继续为新创建的节点的左孩子和右孩子赋值。虽然节点被创建时这些孩子节点的初值是随机的,但会由递归调用将其赋一个空值或者创建一个孩子的。最后树创建结束时孩子节点中是没有随机值的,不是空(叶节点)就是下一级的孩子节点(中间的分支)。