二叉树 插入算法的一点小疑问,该怎么处理

二叉树 插入算法的一点小疑问
这是代码 
C/C++ code

void CBST::insert(const int el)
{
    CBSTNode *p = m_root;
    CBSTNode *prev = 0;

    while ( 0 != p)
    {
        prev = p;
        if (p->m_key < el)
        {    
            p = p->m_right;    
        }
        else
        {
            p = p->m_left;
        }
    }

    if (m_root == 0)
    {
        m_root = new CBSTNode(el);
    }
    else if (prev->m_key < el)
    {
        p = prev->m_right = new CBSTNode(el);   //这里
    }
    else
    {
        p = prev->m_left = new CBSTNode(el);
    }
}

标识行中 p = prev->m_right = new CBSTNode(el); 为什么还得让p = prev->m_right = CBSTNode(el);
直接让p = new CBSTNode(el);不行吗?

------解决方案--------------------
是应该把 p = 去了
------解决方案--------------------

1楼说的非常对,这里不是应该直接赋值给p,应该是根本不再给p赋值
C/C++ code

void CBST::insert(const int el)
{
    CBSTNode *p = m_root;
    CBSTNode *prev = 0;

    // 建把这部分操作放到最前面来做
    if (m_root == 0)
    {
        m_root = new CBSTNode(el);
        return;
    }

    while ( 0 != p)
    {
        prev = p;
        if (p->m_key < el)
        {    
            p = p->m_right;    
        }
        else
        {
            p = p->m_left;
        }
    }

    if (prev->m_key < el)
    {
        prev->m_right = new CBSTNode(el);// 无须再赋值给p,因为p的值无法保留了,可简单推演一下创建一棵树的过程
    }
    else
    {
        prev->m_left = new CBSTNode(el);
    }
}