请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

请问在二分搜索树的构造过程中,我应该如何考虑它的私有成员。

老师您好,truct node的生命能不能放在BST类的外面呢?

对于一个类的声明,它的私有成员应该如何考虑呢?我自己有点糊涂。非常谢谢!

正在回答

1回答

liuyubobobo 2017-12-10 01:16:09

简单来讲,就是你认为用户不需要知道的信息,都应该被设置为私有成员。在我们这一章设置的二分搜索树,最终是作为查找表使用,即对于用户来说,只需要能够往我们的数据结构中添加某个键值对应的数据,修改某个键值对应的数据,或者删除某个键值,就可以了。而对于Node信息,对用户来说是没必要的负担,尤其是左子树右子树指针这种细节,更是没必要,所以,在这个课程中,我将我们的二分搜索树的Node节点设置成是私有的。


可以参考C++中的map或者Java中的TreeMap,本质都是二分搜索树(虽然是平衡的),我们在具体使用的时候是完全不需要知道其中的Node节点是如何定义的:)


但让,如果你的应用场景特殊,认为调用的用户需要了解Node节点具体信息,设计成public是没有问题的。设计这个问题,是没有绝对的对错的:)

2 回复 有任何疑惑可以回复我~
  • 提问者 慕慕9414451 #1
    谢谢老师耐心的回答。
    回复 有任何疑惑可以回复我~ 2017-12-10 16:28:39
  • 提问者 慕慕9414451 #2
    还想追问一下老师,在您讲课过程中说道了有个默认初始值的问题,似乎您构建的BST似乎没有这个功能吧。在您的另一门课程,用map解决两个数组交集的问题中,直接就可以map<int,int> record; for(int i=0;i<nums.size();i++) record[nums[i]]++;
    第一,这里面record[nums[i]]能够直接使用我有点不太理解。
    第二,即使我知道这样可以使用,那么请问,在您实现的BST类能够这样用吗?
    第三,额外话题,请问老师,学生是不是应该看看《STL源码解析》这样的书呢?
    非常谢谢老师!
    回复 有任何疑惑可以回复我~ 2017-12-10 16:37:21
  • liuyubobobo 回复 提问者 慕慕9414451 #3
    你的问题属于C++语法问题。1)map重载了[] operator,在调用record[key]的时候,若key不存在,会自动插入key,所以record[nums[i]]可以直接使用;2)我们在这个课程中实现的BST没有重载[] operator,所以不能这么做。可以自己尝试重载[] operator,实现和map一样的功能。是一个很好的C++练习:)3)如果有需要深入学习C++的话,深入学习STL是很有意义的。不过通过你的问题,我觉得你对于C++的高级语法部分,包括STL提供的API如何使用,其实还不很熟悉,可以先从熟悉这些内容开始,再接触STL的源码部分。
    回复 有任何疑惑可以回复我~ 2017-12-10 19:42:57
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信