Tag: 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* […]

Tic-Tac-Toe:如何填充决策树?

我正在制作Tic-Tac-Toe计划。 我打算用它来使用minimax。 我为所有可能的游戏序列制作了一个带有空间的树,我正在寻找一种填充它的方法。 我目前有这种类型: typedef struct name { char grid [3] [3]; struct name * child [9]; } node; 我正在寻找一种填充网格的方法,就像它在这里显示的一样。 我如何填充网格以确保所有可能的组合都存在? 我的计划是让游戏识别玩家可以采取的每一个动作,然后决定采取什么步骤来获胜(我仍然需要弄清楚决定部分,但我一直坚持,直到我可以填充树中的网格) 。

在二叉树中插入元素

试图通过网络进行大量探索,但可以得到任何帮助,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 […]

在C中表示抽象语法树

我正在C中为一个简单的玩具语言实现一个编译器。我有一个工作的扫描器和解析器,以及AST的概念function/构造的合理背景。 我的问题与在C中表示AST的具体方式有关。我在网上不同的文本/资源中经常遇到三种风格: 每种节点一个结构。 它有一个基节点“class”(struct),它是所有子结构中的第一个字段。 基节点包含一个存储节点类型的枚举(常量,二元运算符,赋值等)。 使用一组宏访问结构的成员,每个结构一个集。 它看起来像这样: struct ast_node_base { enum {CONSTANT, ADD, SUB, ASSIGNMENT} class; }; struct ast_node_constant { struct ast_node_base *base; int value; }; struct ast_node_add { struct ast_node_base *base; struct ast_node_base *left; struct ast_node_base *right; }; struct ast_node_assign { struct ast_node_base *base; struct ast_node_base *left; struct ast_node_base *right; }; #define CLASS(node) ((ast_node_base*)node)->class; […]