2017-10-28 136 views
1

我想在C编程语言中给出下图中给出的二叉树。具有多个子节点和左右两个节点的二元搜索树

结构以制造具有两个节点二叉树是这样的 -

struct node { 
    int data; 
    struct node* left; 
    struct node* right; 
}; 

但制作树有多个孩子的,结构需要改变每一次,那么,有没有办法让改变每一个结构时间?

enter image description here

+1

二叉树,顾名思义,每个节点最多有两个直接子节点。你在图片中描述的不是二叉树。也许你正在考虑一个B-Tree? –

+0

有许多方法可以表示每个节点有多个子节点的树。如果您可以设置一个节点可以拥有的儿童数量的小限制,那么为儿童设置一个小的固定数组就足够了。如果它是无界的,那么你可以动态调整子数组的大小。或者你可以使用其他结构,例如双向链表。这一切都取决于你的使用模式。 –

+0

而不是'struct node * left;'和right,你可以创建一个子节点列表。这样子节点的数量不受限制。 –

回答

1

可以定义这样的节点:

struct node 
{ 
    int data; 
    node *firstChild; 
    node *nextSibling; 
}; 

然后,

  1. 第一个孩子访问是这样的:myNode->则firstChild

  2. 老二:myNode-> firstChild-> nextSibling

  3. 第N个孩子:myNode-> firstChild-> nextSibling - > ...-> nextSibling

这将涉及到null检查和迭代时通过子节点。

+0

这就是所谓的[左小孩右兄弟二叉树](https://en.wikipedia.org/wiki/Left-child_right-sibling_binary_tree) –

1

在C中,你不能动态地改变结构。但是你想要的是什么(每个节点中可变数量的孩子)可以稍微迂回的方式实现。如果你想从其他孩子保持左,右节点作为独立的实体,您可以使用包含该节点的所有其他子链表二叉树:

struct TreeNode 
{ 
    int data; 
    ChildNode *firstChild; 
    TreeNode *left; 
    TreeNode *right; 
}; 

struct ChildNode 
{ 
    int data; 
    ChildNode *next; 
}; 
相关问题