C 具有多个子节点和左右两个节点的二叉搜索树

C 具有多个子节点和左右两个节点的二叉搜索树,c,data-structures,binary-search-tree,C,Data Structures,Binary Search Tree,我想用C语言制作一个二叉树,如下图所示 使二叉树具有两个节点的结构如下- struct node { int data; struct node* left; struct node* right; }; 但是对于制作一个包含多个子树的树,结构需要每次都改变,那么有没有办法制作一个每次都改变的结构呢 您可以定义如下节点: struct node { int data; node *firstChild; node *nextSibling; };

我想用C语言制作一个二叉树,如下图所示

使二叉树具有两个节点的结构如下-

struct node {
    int data;
    struct node* left;
    struct node* right;
};
但是对于制作一个包含多个子树的树,结构需要每次都改变,那么有没有办法制作一个每次都改变的结构呢


您可以定义如下节点:

struct node
{
    int data;
    node *firstChild;
    node *nextSibling;
};
然后呢,

  • 通过以下方式访问第一个子节点:myNode->firstChild

  • 第二个子节点:myNode->firstChild->nextSibling

  • 第n个子节点:myNode->firstChild->nextSibling->…->nextSibling


  • 在遍历子节点时,这将涉及空检查和迭代。

    您可以这样定义节点:

    struct node
    {
        int data;
        node *firstChild;
        node *nextSibling;
    };
    
    然后呢,

  • 通过以下方式访问第一个子节点:myNode->firstChild

  • 第二个子节点:myNode->firstChild->nextSibling

  • 第n个子节点:myNode->firstChild->nextSibling->…->nextSibling


  • 在遍历子节点时,这将涉及空检查和迭代。

    在C中,不能动态更改结构。但是您想要的(每个节点中可变数量的子节点)可以通过稍微迂回的方式实现。如果要将左侧和右侧节点作为独立于其他子节点的实体保留,可以使用包含该节点所有其他子节点的链接列表的二叉树:

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

    在C语言中,不能动态更改结构。但是您想要的(每个节点中可变数量的子节点)可以通过稍微迂回的方式实现。如果要将左侧和右侧节点作为独立于其他子节点的实体保留,可以使用包含该节点所有其他子节点的链接列表的二叉树:

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

    根据定义,二叉树每个节点最多有两个直接子节点。你在图片中描述的不是二叉树。也许您正在考虑B-树?有许多方法可以表示每个节点有多个子节点的树。如果可以对节点可以拥有的子节点数量设置一个较小的限制,那么为子节点设置一个较小的固定数组就足够了。如果它是无界的,则可以动态调整子数组的大小。或者可以使用另一种结构,例如双链接列表。这完全取决于您的使用模式和右键,可以创建子节点列表。这样子节点的数量就不受限制。根据定义,二叉树每个节点最多有两个直接子节点。你在图片中描述的不是二叉树。也许您正在考虑B-树?有许多方法可以表示每个节点有多个子节点的树。如果可以对节点可以拥有的子节点数量设置一个较小的限制,那么为子节点设置一个较小的固定数组就足够了。如果它是无界的,则可以动态调整子数组的大小。或者可以使用另一种结构,例如双链接列表。这完全取决于您的使用模式和右键,可以创建子节点列表。这样子节点的数量就不受限制了,这就是所谓的