老师你好,有个问题是为什么删除这个节点是把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)为空。


请一定仔细思考这个问题。这不完全是数据结构实现的问题,也是一个很重要的语言机制问题。想通彻了,会对近乎所有编程语言的理解上一个台阶的:)


加油!

1
5
hellocp7
回复
liuyubobobo
好的。谢谢老师
2018-08-22
共5条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程