Tag: 二叉树

如何按名称(字符串)搜索和排序BST? 按队列打印并缩进?

我必须编写一个程序,将.txt文件读入树中,然后允许用它执行特定的操作。 我被困在我需要按名称排序树并按名称搜索的部分,任何输入都会很棒。 所以,我的输入文件格式为: 3800 Lee, Victor; 2.8 3000 Brown, Joanne; 4.0 所以,我的二叉树格式为: typedef struct { int id; char name[MAX_NAME_LEN]; float gpa; } STUDENT; typedef struct node { STUDENT* dataPtr; struct node* left; struct node* right; } NODE; typedef struct { int count; int (*compare) (void* argu1, void* argu2); // Was provided by teacher, not really […]

使用箭头 – >和点。 C中的运营商

我的印象是,可以通过使用箭头和点运算符一起访问链表或类似结构的子节点中的数据,如下所示: typedef struct a{ int num; struct a *left; struct a *right; }tree; tree *sample; … if(sample->left.num > sample->right.num) //do something 但是当我尝试实现它时,使用 – >和。 从子节点访问数据我得到错误“请求成员数字不是结构或联合”。

OpenCL – 将树复制到设备内存

我在C代码中实现了二进制搜索树。 我的每个树节点都是这样的: typedef struct treeNode { int key; struct treeNode *right; struct treeNode *left; } treeNode_t; 由主人制作的树的构造。 设备所做树的查询。 现在,让我们假设我已经在主机内存中完成了我的树构建。 我想将树的根复制到我的设备的内存中。 复制树的根本它是不够的。 因为右\左子不在设备内存中。 这是个问题。 所以,我的问题是将整个树复制到设备内存的最简单方法是什么?

C中的通用二叉搜索树

我已经实现了二叉搜索树,但我也想让它变得通用。 代码如下: typedef struct treeNode { int data; struct treeNode *left; struct treeNode *right; } treeNode; 和function: treeNode* FindMin(treeNode *node) { if(node==NULL) { /* There is no element in the tree */ return NULL; } if(node->left) /* Go to the left sub tree to find the min element */ return FindMin(node->left); else return node; } […]

二叉树上的递归删除

我试图理解删除二叉搜索树的递归方法是如何工作的。 我在很多地方遇到的代码如下: void destroy_tree(struct node *leaf) { if( leaf != 0 ) { destroy_tree(leaf->left); destroy_tree(leaf->right); free( leaf ); } } 我无法理解a)如果例程中没有返回,它是如何工作的? b)当free()被调用时? 我想想,例如,这样一棵树: 10 / \ 6 14 / \ / \ 5 8 11 18 所以我的理解是我遍历10-> 6-> 5,然后我调用destroy_tree(5->左)。 因此,leaf if if为NULL,并且if-dependent不执行,因此5不被删除。 我在哪里弄错了这个推理? 如何在这里进行卷绕和展开? 任何帮助都很感激:-)

将最大堆转换为二叉搜索树

我们给出了一个2 m – 1个不同的,可比较的元素的数组,从1开始索引。 我们可以将数组视为完整的二叉树: Node is placed at index i. Left child is placed at 2i. Right child is placed at 2i+1. 例如,数组 [7 6 4 5 2 3 1] 是树 7 / \ 6 4 / \ / \ 5 2 3 1 现在,当被视为二叉树时,这些元素满足堆属性,节点大于其子节点: A[i] > A[2i] and A[i] > A[2i+1] 是否存在相当快速的就地算法来重新排列数组的元素,以便生成的二叉树(如上所述)是二叉搜索树? 回想一下,在二叉搜索树中,节点大于其所有左后代,并且少于其所有右后代。 […]

是否有可能进行有效的基于指针的二进制堆实现?

甚至可以使用指针而不是数组来实现二进制堆 ? 我搜索了互联网(包括SO),但没有找到答案。 这里的主要问题是,你如何跟踪最后一个指针? 将X插入堆中时,将X放在最后一个指针处,然后将其冒泡。 现在,最后一个指针指向哪里? 而且,当你想删除root时会发生什么? 您将根与最后一个元素交换,然后向下冒泡新根。 现在,您如何知道再次删除root时所需的新“最后一个元素”是什么?