难以理解我们为什么使用以及如何将两个结构用于二叉搜索树
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
非常有意义,每个抽象一个。
您发布的 struct
树 bTree
只有一个成员,即根节点。您可以向它添加其他成员——树中的节点数、树中叶节点的最大深度等。当然可以计算这些,但将它们作为成员变量并更新可能很有用当您修改树以使它们可用而无需支付遍历树的成本时。
要记住的主要事情是树和树的节点是两个不同的抽象。它们 应该 使用两个不同的 struct
来定义。每个都可以 extended/updated 独立,具体取决于应用程序的需要。
why I am getting "request for member left in something not a structure or union"
函数 init
中的代码有几个错误。
- 您还没有为"tree"分配任何内存。
- 您正确使用了变量
tree
。在函数中,tree
类型为 bTree**
。它是指向 bTree
. 的指针
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;
}
我正在开发一个涉及使用二叉搜索树的程序,我正在尝试初始化 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
非常有意义,每个抽象一个。
您发布的 struct
树 bTree
只有一个成员,即根节点。您可以向它添加其他成员——树中的节点数、树中叶节点的最大深度等。当然可以计算这些,但将它们作为成员变量并更新可能很有用当您修改树以使它们可用而无需支付遍历树的成本时。
要记住的主要事情是树和树的节点是两个不同的抽象。它们 应该 使用两个不同的 struct
来定义。每个都可以 extended/updated 独立,具体取决于应用程序的需要。
why I am getting "request for member left in something not a structure or union"
函数 init
中的代码有几个错误。
- 您还没有为"tree"分配任何内存。
- 您正确使用了变量
tree
。在函数中,tree
类型为bTree**
。它是指向bTree
. 的指针
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;
}