注册 登录
编程论坛 C++教室

请教:非Binary的多叉树应该怎么定义?

FollowDream 发布于 2017-05-03 11:06, 2798 次点击
首先想请教一下二叉树的定义:
程序代码:
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;
     ...}
};


请问有没有什么好的办法可以实现呢?谢谢了先!
6 回复
#2
qq8266472352017-05-15 15:26
将子节点的指针存到数组里就好
#3
rjsp2017-05-15 17:40
list、vector 等等都可以
#4
yangfrancis2017-05-15 18:08
也有左孩管长子,右孩管兄弟这样来模拟多叉树的
#5
某一天2017-06-01 16:32
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; 来保存整数值
#6
FollowDream2017-06-04 10:23
回复 5楼 某一天
谢谢!我感觉还是要把tree转成tree-list混合结构会更方便些。
#7
某一天2017-06-06 10:47
回复 6楼 FollowDream
很少见到tree+list结构的,或许你某种地方理解有问题.
1