一个简单的问题

来源:6-11 删除二分搜索树的最大元素和最小元素

牡丹丹丹丶

2019-03-30

 root = removeMin(root);

如果没有把root从新赋值,只是

remove(root);

二叉树在调用是否发生了变化?
我的理解是 root 是一个引用变量,调用 remove 之后应该把二叉树改变了。

写回答

1回答

liuyubobobo

2019-03-30

我理解你的意思是直接调用removeMin(root);


在大多数情况下,有变化。


但如果你本身要删除的这个最小节点就是根节点,逻辑就发生错误了:)想想看?或者实际跟踪一下?


当然,这是指你只把第一次递归调用改成这个样子。在removeMin里,每一次递归调用,返回值都要被接住的。如果所有的这个递归调用都改成只调用,不反回,那么在所有情况下就都错了。


整体而言,这个运行逻辑,和我在第五章介绍的链表的递归删除,是完全一致的。只不过对于二叉树,要根据值的大小,区别一下左右而已。可以再仔细回顾一下第五章链表的递归删除,尤其是微观解读,理解一下,这个递归删除的结果,为什么一定要返回去:)


继续加油!:)

1
1
牡丹丹丹丶
谢谢老师的解答!
2019-03-30
共1条回复

玩转数据结构

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

6221 学习 · 1704 问题

查看课程