二叉树插入操作

/*
功能:将一个节点插入到二叉树中节点的子节点中
输入: 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;
}

 

 

 

posted @ 2014-06-25 13:58  北门吹风  阅读(1806)  评论(0编辑  收藏  举报