/*
功能:将一个节点插入到二叉树中节点的子节点中
输入: p,c ,RL
    p:节点将插入到p所指向的节点的子节点中
    c:指向待插入的节点
    RL:为0表示插入到左子树,为1表示插入到右子树
输出:bool
*/
template<typename T>
bool BinaryTree<T>::InsertChild(BTNode<T> *p,BTNode<T> *c,int RL)
{
    if(p)
    {
        if(RL==0) //插入到p的左节点
        {
            c->rchild=p->lchild;//p节点原有的左子树成为c的右子树
            p->lchild=c;//c成为p的左子树
        }
        else
        {
            c->rchild=p->rchild;
            p->rchild=c;
        }
        return true;
    }
    else
        return false;
}

如下有一个二叉树和一个节点,其中p指向节点2,c指向节点6。现在需要将c插入到p的左子树中。

二叉树插入操作

 RL为0,c的右子结点指针(本来指向NULL)指向 p的左子节点(4)

二叉树插入操作

将指向p左子节点的指针 指向c所指向的节点(6)

二叉树插入操作

插入子节点完成

二叉树插入操作

 

另一种实现形式:

template<typename T>
bool BinaryTree<T>::InsertChild(T e,T c,int RL)
{
    BTNode<T> *pe,*pc;
    pe=SearchNode(e);
    if(pe)
    {
        pc=new BTNode<T>;
        pc->data=c;
        pc->lchild=NULL;
        pc->rchild=NULL;
        if(RL==0)
        {
            pc->rchild=pe->lchild;
            pe->lchild=pc;
        }
        else
        {
            pc->rchild=pe->rchild;
            pe->rchild=pc;
        }
        return true;
    }
    cout<<"结点"<<e<<"不存在"<<endl;
    return false;
}

 

 

 

相关文章:

  • 2022-03-09
  • 2021-12-24
  • 2021-09-25
  • 2021-06-23
  • 2021-08-22
  • 2022-12-23
猜你喜欢
  • 2021-05-14
  • 2021-12-03
  • 2021-11-03
  • 2021-05-10
  • 2022-03-04
  • 2022-12-23
  • 2022-01-12
相关资源
相似解决方案