请问老师关于向二分搜索树中添加元素的问题

来源:6-3 向二分搜索树中添加元素

精慕门6573819

2019-08-28

图片描述
关于这段代码,假如我添加一个元素,根据递归的逻辑,假如找到node.left为null,然后将元素添加到这个null的位置,这个时候程序执行是不是就结束了?但是由于递归已经把原二分搜索树给分解成了规模更小的问题,也就是分成了多棵树,但最后有没有把这棵树再给拼装起来呢?

写回答

1回答

liuyubobobo

2019-08-28

准确的说,没有结束,因为return的过程还会层层调用回去。但是,每层调用回去,不会做任何事情了。


不需要“拼”。


我要想在以 node 为根节点的二分搜索树上添加一个元素,需要或者在以node->left 为根节点的二分搜索树上添加一个元素;或者在以node->right 为根节点的二分搜索树上添加一个元素。

在以以node->left 为根节点的二分搜索树上添加一个元素;或者在以node->right 为根节点的二分搜索树上添加一个元素以后,就等同于在以node为根节点的二分搜索树上添加了元素

因为,这个过程,node和node->left和node->right没有断裂。从node转向node->left或者node->right,只是我们不再看node了而已,但是,整棵树没有被我们拆看,也就没有必要“拼接”。


这一小节的代码,和下一小节的代码,核心是递归的终止条件不同,导致了逻辑上的区别。一个终止到node为空的情况(下一小节),一个终止到待添加位置的父亲节点(这一小节)。


请仔细比较这两小节的代码,对理解递归很重要:)


加油!:)

0
1
精慕门6573819
非常感谢!
2019-08-28
共1条回复

玩转数据结构

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

6221 学习 · 1704 问题

查看课程