首页 新闻 会员 周边

C++树结构实现中,为什么要单独定义节点类?

0
悬赏园豆:100 [待解决问题]

学习数据结构有关二叉树的实现时,书上大概是这么写的:
class BTnode{
private:
string val;
BTnode * _lchild;
BTnode * _rchild;
}
class BinaryTree{
private:
BTnode *_root;
}
里面增加了节点类,感觉没有必要,直接用下面的实现也可以吧?
class BinaryTree{
private:
string val;
BinaryTree*_root;
BinaryTree* _ltree;
BinaryTree* _rtree;
}
为什么要单独设置一个节点类呢?

nolestone的主页 nolestone | 初学一级 | 园豆:102
提问于:2015-05-07 11:05
< >
分享
所有回答(5)
0

你的这个左右节点都多余了一个_root属性

茂茂 | 园豆:2892 (老鸟四级) | 2015-05-07 11:20

BinaryTree* _ltree;
BinaryTree* _rtree;

这个左右子树里面的_root分别代表左右子树的根节点,没有问题啊

支持(0) 反对(0) nolestone | 园豆:102 (初学一级) | 2015-05-07 11:38
0

你要觉得没问题,你可以找出一千种理由来支持你的说法,而且我也没法证明你是错的,因为这里不存在对与错。

因为只有将其放置到特定的场景中时,场景的上下文才会对你的设计提出需要修改的地方。

Launcher | 园豆:45045 (高人七级) | 2015-05-07 12:01
0

在自身的类中 声明自身的变量,容易让初学者理解,因为这样子可以代表 所有的节点都一样,所有的节点即可以成为父节点,也可以成为子节点,而且 在演示递归算法的时候 更容易让人理解。像你那种写法,初学者容易搞懂。一般来说,初学者,喜欢让自己的想法 传播给所有的人的人 喜欢子这样子写。

 

但是写书的人都喜欢装B,喜欢 搞“为了对象而对象”的思维。所以 就那样子写啦。

需要格局 | 园豆:2145 (老鸟四级) | 2015-05-07 14:11
1

我上学的时候的数据结构的定义就是类似于这种的方式:

    struct TreeNode
    {
        string val;
        TreeNode* _lchild;
        TreeNode* _rchild;
    }

从功能上来讲,有左子树,右子树,值节点就够了。所谓的树节点,本身就是一个指针而已, 不需要单独定义。 子树也可以看做一个完整的二叉树。

天方 | 园豆:5407 (大侠五级) | 2015-05-07 15:59
0

你自己实现具体功能的时候就能体会到为什么这么写了。书上的意思是把根节点单独拿出来,这样就造成两个类,其实个人觉得没有必要,一个节点类就够了,使用时用节点类定义root就可以。一个写法而已,答案哪有唯一的。但是你写的就不对了。你的实现,搞三个指针,我觉得你不是要指向父节点,指向父节点的时候可以多设一个指针。而你这里其实有其余两个存在,root就没有存在的必要了。说明白点就是,你的树的普通结点(非根节点)里的root是干嘛的,有左右儿子指针不就行了吗。

jiu~ | 园豆:444 (菜鸟二级) | 2015-05-10 17:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册