关于网友提出的“ 二叉树 二叉链表 插入子树”问题疑问,本网通过在网上对“ 二叉树 二叉链表 插入子树”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 二叉树 二叉链表 插入子树描述:
Status InsertChild(BiTree p,int LR,BiTree c) /* 形参T无用 */
{ /* 初始条件:二叉树T存在,p指向T中某个结点,LR为0或1,非空二叉树c与T不相交且右子树为空 */
/* 操作结果:根据LR为0或1,插入c为T中p所指结点的左或右子树。p所指结点的 */
/* 原有左或右子树则成为c的右子树 */
if(p) /* p不空 */
{
if(LR==0)
{
c->rchild=p->lchild;
p->lchild=c;
}
else /* LR==1 */
{
c->rchild=p->rchild;
p->rchild=c;
}
return OK;
}
return ERROR; /* p空 */
}
这时我找到的二叉树,插入子树程序,问题在于执行c->rchild=p->lchild;,不就丢失c原有的右子树吗?这个程序不对啊,有没有人提供一个正确的程序?
解决方案1:
楼上说得对,如果C的右子树为空,这样做是对的。
解决方案2: 你找到的程序的前提是C的右子树为空啊?
不知你的要求是什么,插入后原子树与C之间要求的组合关系是什么,
如:是二叉排序树的插入,还是平衡二叉树的子树插入。
这个可能是插入一个树结点。
而不是一颗树。
如果c已经有结点了,那c的结点和p的结点应该存在某种关系才能判断p的结点要插在c下的那个位置上。
如果没有关系,那找一个空的子结点的地方插入就可以了。