请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

successor 赋值顺序问题

Bobo老师,您好! 请问在java版本中 (successor.right = removeMini(root.right); successor.left = root.left;)如果先给successor.left 赋值,再给 successor.right 赋值为什么会报错,谢谢

正在回答 回答被采纳积分+3

1回答

liuyubobobo 2019-01-29 11:19:11

removeMin(node.right) 中的逻辑是沿着node.right的左孩子一直向左找,直到无法继续向左。


如果你先让successor.left = node.left,successor本身就是node.right最左的孩子,现在让他的左节点又指向了node.left,这将导致形成了一个环,在removeMin(node.right)的过程中,一直向左寻找出错。


如果还想不明白,做一个小型的BST,有三层就够。在bst.remove这句话上加断点,然后跟进程序里,看一看程序到底发生了什么?只有自己不断地debug,不断地实际找到自己逻辑上的漏洞,编程能力才能真正提高哦:)


加油!

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信