关于c语言在二叉排序树中删除节点的一个问题

生活 时间:2026-04-06 21:56:51 阅读:5460
关于c语言在二叉排序树中删除节点的一个问题

最佳回答

多情的保温杯

现实的早晨

2026-04-06 21:56:51

q=p;//记下P的位置给q后面用于比较。 s=p->lchild;//将p的左子树给S。 while(s->rchild){q=s;s=s->rchild;}//走到S结点的右尽头。因为是排序树,只有右尽头的结点才在p的左子树和右子树之间来充当将被删除的p结点。 p->data=s->data;这里找到了结点,将它代替P,即将P结点删除了。 if(q!=p)q->rchild=s->lchild;//这里意思是上面循环至少运行过一次,我们找到的结点s可能有左结点,就将左结点充当s,即q的右结点,s的左结点可以为空 else q->lchild=s->lchild;//这里意思是上面循环一次都没运行,即p的左子树上没有右子树。则将s的左结点接在q的左结点上 解释到此,希望你能明白

最新回答共有2条回答

  • 优雅的鱼
    回复
    2026-04-06 21:56:51

    q=p;//记下P的位置给q后面用于比较。 s=p->lchild;//将p的左子树给S。 while(s->rchild){q=s;s=s->rchild;}//走到S结点的右尽头。因为是排序树,只有右尽头的结点才在p的左子树和右子树之间来充当将被删除的p结点。 p->data=s->data;这里找到了结点,将它代替P,即将P结点删除了。 if(q!=p)q->rchild=s->lchild;//这里意思是上面循环至少运行过一次,我们找到的结点s可能有左结点,就将左结点充当s,即q的右结点,s的左结点可以为空 else q->lchild=s->lchild;//这里意思是上面循环一次都没运行,即p的左子树上没有右子树。则将s的左结点接在q的左结点上 解释到此,希望你能明白

上一篇 勾股定理是什么

下一篇 求匪我思存《爱你是最好的时光》两部小说