难以理解我们为什么使用以及如何将两个结构用于二叉搜索树

Having trouble understanding why we use and how to use two structs for a binary search tree

我正在开发一个涉及使用二叉搜索树的程序,我正在尝试初始化 BST。但是我很难理解为什么我们使用两个结构,以及为什么我得到 "request for member left in something not a structure or union"

#include <stdio.h>
#include <stdlib.h>
#define ADD_LENGTH 30



typedef struct treeType{
    int listingId, price, propertySize;
    int numOfBeds, yearBult;
    char agent[20];
    char address[ADD_LENGTH];
    struct treeType *left;
    struct treeType *right;

}bNode;

typedef struct treeFrame{
    bNode *node;

}bTree;
void init(bTree **tree);


int main(void)
{
    bTree *tree;
    init(&tree);

    return 0;
}

void init(bTree **tree){
    tree = NULL;
    tree->left = NULL;
    tree->node->right = NULL;


}

But I'm having a hard time understanding why we use two structures

您正在处理两个抽象概念——树和树的节点。使用两个 struct 非常有意义,每个抽象一个。

您发布的 structbTree 只有一个成员,即根节点。您可以向它添加其他成员——树中的节点数、树中叶节点的最大深度等。当然可以计算这些,但将它们作为成员变量并更新可能很有用当您修改树以使它们可用而无需支付遍历树的成本时。

要记住的主要事情是树和树的节点是两个不同的抽象。它们 应该 使用两个不同的 struct 来定义。每个都可以 extended/updated 独立,具体取决于应用程序的需要。

why I am getting "request for member left in something not a structure or union"

函数 init 中的代码有几个错误。

  1. 您还没有为"tree"分配任何内存。
  2. 您正确使用了变量 tree。在函数中,tree 类型为 bTree**。它是指向 bTree.
  3. 的指针
  4. bTree 没有名为 left 的成员。因此,您尝试使用 tree->left = NULL; 是不正确的。

你需要的是:

void init(bTree **tree) 
{
   // Allocate memory for the tree.
   *tree = malloc(sizeof(bTree));

   // Make the root node NULL to indicate it is an empty tree.
   (*tree)->node = NULL;
}