Tag: binary tree

从C二进制树中删除节点而不会弄乱它

我是一个初学者,正在研究一个C二叉树库。我想知道如何从二叉树中删除一个节点而不会搞乱整个事情。这就是我创建树的方法: 结构: struct Node { int value; struct Node *left; struct Node *right; }; typedef struct Node TNode; typedef struct Node *binary_tree; 创建树: binary_tree NewBinaryTree(int value_root) { binary_tree newRoot = malloc(sizeof(TNode)); if (newRoot) { newRoot->value = value_root; newRoot->left = NULL; newRoot->right = NULL; } return newRoot; } 添加元素: void Insert(binary_tree *tree, int val) { if […]

在C99中创建二叉搜索树

我有一个编程课程作业将于今晚8点CDT到期,我遇到了麻烦。 我们将通过阅读文件来获取以下数字的列表: 9 30 20 40 35 22 48 36 37 38 将它们放在一个数组中(很容易),然后使用C将它们读入二进制搜索树。列表中的第一个数字是树中元素的数量。 其余的放在以下结构中: typedef struct node_struct { int data; struct node_struct* left; struct node_struct* right; } Node; 我想我已经完成了第一部分。 拿东西使用fscanf(我没有选择使用这个方法,我更喜欢fgets),在数组的每个成员上调用一个插入函数,然后在插入函数中调用一个“createNode”函数。 问题是,我只有一名成员进入BST。 此外,BST必须满足条件node->left->data data right->data …换句话说,节点必须在树中按顺序排列。 这是我到目前为止所拥有的: #include #include #include // def BST node struct typedef struct node_struct { int data; struct node_struct* left; struct node_struct* […]

在二叉树中插入元素

试图通过网络进行大量探索,但可以得到任何帮助,Everywhere就像在二进制搜索树中添加一个节点一样。 问题:请求用于将节点添加到二叉树的算法和代码片段。 (或指向我更正url) 假设:根据我的理解, 二叉树和二叉搜索树是不同的? 如果我错了,请纠正我。 (请求:如果您正在编写代码片段,请使用适当的变量名称,这有助于理解) 例如:二叉树 5 7 3 x1 x2 x3 5 7 3 x1 x2 x3 二进制搜索树5 7 3 2 4 6 5 3 7 2 4 6 insert(int key, struct node **root) { if( NULL == *root )` { *root = (struct node*) malloc( sizeof( struct node ) );` (*root)->data […]

struct的access元素传递给void *指针

我正在使用二叉搜索树数据结构来对具有类型定义的一系列结构进行排序: typedef struct { char c; int index; } data_t; typedef struct node node_t; typedef node { void *data; node_t *left; node_t *right; } node_t typedef来自为此目的提供给我的库,可能带有void *指针以确保多态性。 node将传递给函数: static void *recursive_search_tree(node_t *root, void *key, int cmp(void*,void*)) 在recursive_search_tree函数中,我希望能够修改代码以使用index元素作为条件来查找最接近字符数组的线性传递索引的匹配,这最终将涉及传递给*key的data_t *key和key->index在函数内被访问。 问题 是否可以访问key->index其中key是指向data_t结构的void* ,或者只有在data_t被声明为key的类型时才可能这样data_t ? 我试图做后者,但即使将指针强制转换为int似乎也没有通过编译器。