采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师您好,truct node的生命能不能放在BST类的外面呢?
对于一个类的声明,它的私有成员应该如何考虑呢?我自己有点糊涂。非常谢谢!
简单来讲,就是你认为用户不需要知道的信息,都应该被设置为私有成员。在我们这一章设置的二分搜索树,最终是作为查找表使用,即对于用户来说,只需要能够往我们的数据结构中添加某个键值对应的数据,修改某个键值对应的数据,或者删除某个键值,就可以了。而对于Node信息,对用户来说是没必要的负担,尤其是左子树右子树指针这种细节,更是没必要,所以,在这个课程中,我将我们的二分搜索树的Node节点设置成是私有的。
可以参考C++中的map或者Java中的TreeMap,本质都是二分搜索树(虽然是平衡的),我们在具体使用的时候是完全不需要知道其中的Node节点是如何定义的:)
但让,如果你的应用场景特殊,认为调用的用户需要了解Node节点具体信息,设计成public是没有问题的。设计这个问题,是没有绝对的对错的:)
谢谢老师耐心的回答。
还想追问一下老师,在您讲课过程中说道了有个默认初始值的问题,似乎您构建的BST似乎没有这个功能吧。在您的另一门课程,用map解决两个数组交集的问题中,直接就可以map<int,int> record; for(int i=0;i<nums.size();i++) record[nums[i]]++; 第一,这里面record[nums[i]]能够直接使用我有点不太理解。 第二,即使我知道这样可以使用,那么请问,在您实现的BST类能够这样用吗? 第三,额外话题,请问老师,学生是不是应该看看《STL源码解析》这样的书呢? 非常谢谢老师!
你的问题属于C++语法问题。1)map重载了[] operator,在调用record[key]的时候,若key不存在,会自动插入key,所以record[nums[i]]可以直接使用;2)我们在这个课程中实现的BST没有重载[] operator,所以不能这么做。可以自己尝试重载[] operator,实现和map一样的功能。是一个很好的C++练习:)3)如果有需要深入学习C++的话,深入学习STL是很有意义的。不过通过你的问题,我觉得你对于C++的高级语法部分,包括STL提供的API如何使用,其实还不很熟悉,可以先从熟悉这些内容开始,再接触STL的源码部分。
登录后可查看更多问答,登录/注册
课程专为:短时间内应对面试、升职测评等艰巨任务打造
8.8k 21
5.7k 3
4.9k 5
1.4k 18