bobo老师,有一个小疑问一直没能解决
来源:6-12 删除二分搜索树的任意元素

学习使我快乐丷
2018-10-18
关于successor的问题
在您的实现中,successor先设置它的右孩子,在设置它的左孩子(保持不变)。但是我在实现的时候先设置左孩子:
successor.left = node.left
然后再通过相应的操作设置右孩子,结果打印的时候就变成死循环打印了。而先设置右孩子就没有这个问题~实在是想不明白- -
写回答
1回答
-
如果是这个逻辑:
Node successor = minimum(node.right); successor.left = node.left; successor.right = removeMin(node.right);
注意,successor.left = node.left; 相当于你在node.right的最小值左侧,又添加了新的节点(子树)。
而后面执行的removeMin的过程,就是要在node.right这棵树中不断向左寻找最小值。上面你在node.right的左侧添加了新的子树,这部分逻辑就不对了。
如果还想不明白,是用一棵非常小的树,就能复现这个问题。加个断点,然后跟进程序里,看一看程序到底发生了什么?计算机不是工科,不能光靠想,必须要实践。只有自己不断地debug,不断地实际找到自己逻辑上的漏洞,编程能力才能真正提高哦:)
加油!
112018-10-19
相似问题