使用c语言实现结点值为字母的完全二叉树的插入、遍历和删除
时间: 2023-07-16 13:14:02 浏览: 83
c++实现在二叉检索树中删除一个结点的算法
5星 · 资源好评率100%
下面是使用C语言实现结点值为字母的完全二叉树的插入、遍历和删除的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
struct TreeNode {
char value;
struct TreeNode *left;
struct TreeNode *right;
};
struct TreeNode* createNode(char value) {
struct TreeNode* node = (struct TreeNode*) malloc(sizeof(struct TreeNode));
node->value = value;
node->left = NULL;
node->right = NULL;
return node;
}
void insertNode(struct TreeNode** root, char value, int index, int len) {
if (index >= len) {
return;
}
if (*root == NULL) {
*root = createNode(value);
} else if (index <= len / 2 - 1) {
insertNode(&((*root)->left), value, index * 2 + 1, len);
} else {
insertNode(&((*root)->right), value, (index - len / 2) * 2 + 2, len);
}
}
void inorderTraversal(struct TreeNode* root) {
if (root != NULL) {
inorderTraversal(root->left);
printf("%c ", root->value);
inorderTraversal(root->right);
}
}
void deleteTree(struct TreeNode* root) {
if (root != NULL) {
deleteTree(root->left);
deleteTree(root->right);
free(root);
}
}
int main() {
struct TreeNode* root = NULL;
int len = 7; // 7个结点的完全二叉树
char values[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
for (int i = 0; i < len; i++) {
insertNode(&root, values[i], i, len);
}
printf("Inorder traversal of the tree: ");
inorderTraversal(root);
printf("\n");
deleteTree(root);
return 0;
}
```
在上面的示例代码中,我们定义了一个 `struct TreeNode` 结构体来表示二叉树中的结点,并使用 `createNode` 函数来创建新结点。`insertNode` 函数用于插入新的结点,它接收一个指向根节点的指针、要插入的值、插入的索引和完全二叉树的长度作为参数。在插入结点时,我们可以使用索引来确定要将其插入到哪个位置。`inorderTraversal` 函数用于对树进行中序遍历,并输出每个结点的值。`deleteTree` 函数用于删除整个树。
在 `main` 函数中,我们先创建一个空的根节点,并为完全二叉树中的每个位置插入一个字母。然后,我们对树进行中序遍历,并输出每个结点的值。最后,我们删除整个树。
阅读全文