无法理解我们使用的原因以及如何将二个结构用于二叉搜索树

时间:2016-04-10 00:47:43

标签: c linked-list binary-search-tree abstract-data-type

我正在处理涉及使用二进制搜索树的程序,我正在尝试初始化BST。但我很难理解为什么我们使用两种结构,以及为什么我要求成员留在不是结构或联合的东西中#34;

#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;


}

1 个答案:

答案 0 :(得分:1)

  

但是我很难理解为什么我们使用两种结构

您正在处理两个抽象 - 树和树的节点。使用两个struct s是完全合理的,每个抽象都有一个。

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

要记住的主要事情是树和树的节点是两个不同的抽象。 使用两个不同的struct进行定义。每个都可以根据应用程序的需要独立扩展/更新。

  

为什么我得到&#34;要求成员留在不是结构或工会的东西&#34;

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

  1. 您尚未为&#34;树&#34;。
  2. 分配任何内存
  3. 您正在使用变量tree。在函数treebTree**。它是指向bTree的指针的指针。
  4. bTree没有名为left的成员。因此,您尝试使用tree->left = NULL;的行为不正确。
  5. 您需要的是:

    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;
    }