首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-03-15 
二叉树 插入算法的一点小疑问这是代码C/C++ codevoid CBST::insert(const int el){CBSTNode *p m_rootC

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

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);    }} 

热点排行