老师你好,有个问题是为什么删除这个节点是把node.right=null,而不是把这个node=null
来源:6-11 删除二分搜索树的最大元素和最小元素
hellocp7
2018-08-16
或者说应该同时把node和node.right都置为null
写回答
1回答
-
liuyubobobo
2018-08-17
直接给node赋值为空是错误的,是不能够正确删除节点的(试试看?)。
再回忆一下4-5小节(https://coding.imooc.com/lesson/207.html#mid=13448)第2:55我讲的在链表中删除节点的经典问题。将node设置为空,node只是这个方法中的局部变量(一个引用)而已,这个操作无法影响整个链表,只是让node这个引用指向了null而已。所以,我们在链表中删除一个元素,要找到待删除元素的前一个节点,让其next为空,这样才能改变整个链表。同理,在二分搜索树的删除中,我们其实找的是待删除元素的父亲节点,让其right(或者left)为空。
请一定仔细思考这个问题。这不完全是数据结构实现的问题,也是一个很重要的语言机制问题。想通彻了,会对近乎所有编程语言的理解上一个台阶的:)
加油!
152018-08-22
相似问题