Tag: 二叉树

c中二进制搜索树中的字频率?

我必须计算二进制树中一个单词存在多少次,我不能这样做,我该怎么做? 这是我的代码; #include “stdio.h” #include “stdlib.h” #include “string.h” struct treeNode { char data[20]; int count; struct treeNode *leftPtr, *rightPtr; }; int number = 1; typedef struct treeNode TreeNode; typedef TreeNode *TreeNodePtr; void insertNode(TreeNodePtr *treePtr, char word[]); void alphabetic(TreeNodePtr treePtr); int main() { /*reading strings from the file and add them to the tree*/ char first[20]; […]

创建二叉树而不是二叉搜索树

我想创建一个从左到右填充的二叉树。 即如果要插入1,2,3那么树应该看起来像 1 / \ 2 3 我写了一个插入函数,在树中插入节点。 对于第一个节点,一切正常。但是,对于下一个节点(如果我想将4,5作为子项插入2和后来6,7作为子节点3)我应该如何在父节点之间切换(2,3) ? 这是我的插入function struct node * Insert(struct node * node, int data) { if(node == NULL) return (newNode(data)); else { if(!node->left) node->left = Insert(node->left,data); if(!node->right) node->right = Insert(node->right,data); //can’t figure out the condition when they both fail } }

C中的非递归/迭代二进制搜索树(家庭作业)

如何在C中使用迭代算法在二进制搜索树中创建/删除节点?

从c中的前缀表达式构建解析树

我正在尝试创建这样的二叉树: link 输入将由用户输入为前缀并作为字符串读取,然后放入二叉树中。 这是我到目前为止: struct node{ char val; struct node *left; struct node *right; }; typedef struct node root; typedef root *tree; 主要: void main(){ int i; tree tr; char* s; s=input(); //input function tr=create_empty_tree(); for(i=0;s[i]!=’\0′;i++){ tr=add_root(s[i],ab); } convert_infix(tr); } 这是我几天来一直在努力的部分; 我似乎无法正确构建树。 这是我到目前为止: tree add_root(char val, tree tr){ if ( tr == NULL ){ tr= […]

二叉树递归函数

我需要打印出一个如下所示的二叉树: ——–x——- —-x——-x— –x—x—x—x- -xxxxxxxx xxxxxxxxxxxxxxxx 使用递归打印行的左侧和行的右侧,但第一行除外。 因此该函数将调用具有左起点和右终点参数的显示函数。 然后它会自动调用两次,左侧为一侧,右侧为一侧。 #include #define LENGTH 16 void makeBranches(int, int); void display(int, int); int main(){ makeBranches(0, LENGTH-1); } void makeBranches(int left, int right){ if(left >= right){ return; } else{ display(left, right); makeBranches(left, (right+left)/2); makeBranches((right+left)/2+1, right); } } void display(int left, int right){ int mid = (left+right)/2; int i; for(i […]

在二叉树中解析和存储字符串时,程序中的Seg Fault

现在我甚至没有得到我的程序的段故障,我很确定它只是永远运行,因为当我运行程序时没有产生输出,甚至没有分段错误。 基本上我想要我的程序要做的是读取4行文件。 然后我们使用用户创建的tokenizer函数和已创建的strtok函数来解析字符串。 然后我想从读入的命令中创建一个二叉树。就像我之前说的那样,我的程序当时没有产生输出,但它确实编译了。 我将发布我拥有的代码和您读入的文件以及示例输出。 我很感激帮助。 #include #include #include #define COMMAND_NAME_LEN 50 #define MAX_SPLIT_SIZE 50 #define MAX_BUFF_SIZE 50 typedef struct Command_ { char name[COMMAND_NAME_LEN]; int expected_param_count; struct Command_ *left; struct Command_ *right; }Command; typedef struct StringArray_ { char **strings; int size; }StringArray; StringArray* tokenizer (char *string, const char* delimiters); void free_string_array(StringArray *sr); void create_commands_tree(Command **commands, […]

二叉树中的递归函数解释

我正在阅读二叉树教程。 而且我在使用递归函数方面略有困难。 比方说,我需要计算树中的节点数 int countNodes( TreeNode *root ) { // Count the nodes in the binary tree to which // root points, and return the answer. if ( root == NULL ) return 0; // The tree is empty. It contains no nodes. else { int count = 1; // Start by counting the root. […]

释放二叉树C的记忆

我想从我分配的二叉树中释放内存,这样做最好的遍历是什么? typedef struct Node{ struct Node * right; struct Node * left; void * data; }Node; typedef int (*cmp) (void*,void *); Node* init(void * element){ Node * newNode=(Node*)malloc(sizeof(Node)); newNode->data=element; newNode->left=NULL; newNode->right=NULL; return newNode; } void insert(void * element, Node** root,cmp compareTo){ if(*root==NULL){ *root=init(element); return; } if(compareTo(element,(*root)->data)==1) insert(element,&((*root)->left),compareTo); else insert(element,&((*root)->right),compareTo); }

在二叉树中,找到有多少祖父只有两三个孙子

8 / \ 4 12 / \ / \ 3 6 2 1 / \ / \ / / \ 7 10 13 15 5 9 11 / 14 我需要找到一棵树的祖父,在这个例子中,我只有一个祖父,12号(我需要他只有两三个孙子)。 这是我到目前为止所尝试的: int T(struct node * tree){ int t = 0; if (tree == NULL) return 0; if (tree->left && tree->right) { //In this case i […]

带叉子的二进制进程树()

我的OS类的第一个项目是使用fork()创建一个进程树,它具有用户在命令行指定的深度。 每个叶级节点都需要对数据进行排序,并使用命名管道(FIFO)将其传递回父级。 我可以用fork()创建一个N深度树,每个进程有2个子节点。 我无法弄清楚的是如何将FIFO一直传递给树中的每个子进程 ,然后让这个进程对FIFO中的某些数据执行排序,然后将其从树中传递回顶部。 这是我到目前为止构建树的伪代码: void CreateTree(int level) { if level = 0 return int left_child = fork(); if(left_child != 0) //we are the parent { int right_child = fork(); if(right_child == 0) CreateTree(level – 1); } else { CreateTree(level-1); } } 那么我如何单独抓取每个进程来与它们一起工作呢?