标题:请教:非Binary的多叉树应该怎么定义?
只看楼主
FollowDream
Rank: 2
等 级:论坛游民
帖 子:33
专家分:14
注 册:2017-1-12
结帖率:33.33%
 问题点数:0 回复次数:6 
请教:非Binary的多叉树应该怎么定义?
首先想请教一下二叉树的定义:
程序代码:
struct TreeNode { 
int val; 
TreeNode *left; 
TreeNode *right; 
TreeNode(int x): val(x), left(nullptr), right(nullptr) {} //请问这句是什么意思?我当初学二叉树的时候struct里没有这句…… 
}; 

   
其次想请教一下多叉树的实现:
搜了一下,网上有一些信息,但是感觉都是template而且子叉的数目已经给定(或者,最多的子叉的数目给定,如果不够那就缺省)。如果希望子叉的个数是一个变量,
程序代码:
struct TreeNode { 
int val; 
int number; 
for(size_t t=0; t<number; t++) { 
     TreeNode *child1; 
     TreeNode *child2; 
     TreeNode *child3; 
     ...} 
}; 


请问有没有什么好的办法可以实现呢?谢谢了先!
搜索更多相关主题的帖子: 网上 而且 二叉树 信息 
2017-05-03 11:06
qq826647235
Rank: 2
等 级:论坛游民
帖 子:37
专家分:10
注 册:2016-5-4
得分:0 
将子节点的指针存到数组里就好
2017-05-15 15:26
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
list、vector 等等都可以
2017-05-15 17:40
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
得分:0 
也有左孩管长子,右孩管兄弟这样来模拟多叉树的
2017-05-15 18:08
某一天
Rank: 2
等 级:论坛游民
威 望:1
帖 子:33
专家分:77
注 册:2015-6-15
得分:0 
1.正常来说大部分树都是二叉树.让在一个节点中,左子节点比根节点小,右子节点比根节点大,这样增删改查效率高.一般不使用多子节点.
2.如果一定想用多子节点的话,可以这样(粗略写下伪代码,需要根据实际想法调整,增删改查等方法需要酌情添加,不保证没错误):

struct TreeNode;
struct ListNode{ // 用一个链表来表示子节点
TreeNode* childTreeNode; // 用来保存树的子节点
ListNode* nextNode; // 下一个兄弟节点,要多少就可以添加多少
ListNode():childTreeNode(nullptr),nextNode(nullptr){} // 构造函数,这个是用了给结构体初始化值的,刚定义的结构体为空,所有,要给指针变量赋值成空(nullptr),避免野指针
}
struct TreeNode {
int val;
ListNode childNodes; // 子节点列表
TreeNode() {} // 构造函数
};

3.使用模版是为了能够兼容其它类型,以上写法就只能用 int val; 来保存整数值
2017-06-01 16:32
FollowDream
Rank: 2
等 级:论坛游民
帖 子:33
专家分:14
注 册:2017-1-12
得分:0 
回复 5楼 某一天
谢谢!我感觉还是要把tree转成tree-list混合结构会更方便些。
2017-06-04 10:23
某一天
Rank: 2
等 级:论坛游民
威 望:1
帖 子:33
专家分:77
注 册:2015-6-15
得分:0 
回复 6楼 FollowDream
很少见到tree+list结构的,或许你某种地方理解有问题.
2017-06-06 10:47



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-476656-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.151016 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved