目录
话题深入
昨天在写二叉搜索树的时候,写了下面一段代码,结果在插入三个以上节点的时候程序就会崩溃,代码如下:
while(p){
q = p;//改变之前保存父节点
if(element.key == p->data.key) return false;//发生重复不可插入
if(element.key < p->data.key) p = p->leftChild;
if(element.key > p->data.key) p = p->rightChild;
}
乍一看这段代码没什么错误,可是为什么会报错呢?后来经过测试发现,是不规范使用多重if的原因,当执行第二个if语句,也就是下面这个if语句:
if(element.key < p->data.key) p = p->leftChild;
这时候如果第二个条件满足,那么p指针就会被修改,所以当判断第三个if的时候就不会是以前的那个数值了,可能第三个条件被继续满足。这里我修改成规范的if else语句,错误就被修复了:
while(p){
q = p;//改变之前保存父节点