二叉树 插入算法的一点小疑问,该怎么处理
二叉树 插入算法的一点小疑问
这是代码
标识行中 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; 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); } }