用C语言写一段代码,二叉树节点是char类型,实现二叉树节点的删除操作。具体过程为根据输入的节点创建二叉树,再次输入一个二叉树中某个节点的值,在二叉树中找到该节点,删除该节点的左子树
时间: 2023-10-10 12:04:29 浏览: 86
用C++实现二叉树的建立,删除,添加。主要使用的是类的结构。....rar
下面是一份使用C语言实现的二叉树节点删除操作的代码,其中二叉树节点类型为char类型。
```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 = node->right = NULL;
return node;
}
struct TreeNode* insertNode(struct TreeNode* root, char value) {
if (root == NULL) {
return createNode(value);
}
if (value < root->value) {
root->left = insertNode(root->left, value);
} else {
root->right = insertNode(root->right, value);
}
return root;
}
struct TreeNode* searchNode(struct TreeNode* root, char value) {
if (root == NULL || root->value == value) {
return root;
}
if (value < root->value) {
return searchNode(root->left, value);
} else {
return searchNode(root->right, value);
}
}
struct TreeNode* deleteNode(struct TreeNode* root, char value) {
if (root == NULL) {
return root;
}
if (value < root->value) {
root->left = deleteNode(root->left, value);
} else if (value > root->value) {
root->right = deleteNode(root->right, value);
} else {
if (root->left == NULL) {
struct TreeNode* temp = root->right;
free(root);
return temp;
} else if (root->right == NULL) {
struct TreeNode* temp = root->left;
free(root);
return temp;
}
struct TreeNode* temp = root->right;
while (temp->left != NULL) {
temp = temp->left;
}
root->value = temp->value;
root->right = deleteNode(root->right, temp->value);
}
return root;
}
void inorderTraversal(struct TreeNode* root) {
if (root != NULL) {
inorderTraversal(root->left);
printf("%c ", root->value);
inorderTraversal(root->right);
}
}
int main() {
struct TreeNode* root = NULL;
char value;
printf("请输入二叉树节点的值(输入#表示结束):\n");
while (1) {
scanf("%c", &value);
if (value == '#') {
break;
}
root = insertNode(root, value);
}
printf("请输入要删除节点的值:\n");
scanf("%c", &value);
root = deleteNode(root, value);
printf("删除节点的左子树:\n");
inorderTraversal(root->left);
return 0;
}
```
在这个代码中,我们首先定义了一个二叉树节点的结构体,包含节点的值以及左右子树的指针。然后,我们定义了一些辅助函数,包括创建节点、插入节点、查找节点和删除节点等。
在主函数中,我们首先让用户输入节点的值来创建二叉树,然后再让用户输入要删除的节点的值,并通过调用deleteNode函数来删除该节点的左子树。最后,我们使用inorderTraversal函数遍历删除后的二叉树的左子树,并输出结果。
需要注意的是,在输入节点值的时候,我们通过使用scanf函数来读取用户输入的字符。由于scanf函数会把回车符也读入,因此在读取字符之前我们需要先调用getchar函数来吃掉回车符。此外,在调用deleteNode函数时需要将根节点作为参数传入,并将返回的节点再赋值给根节点,这样才能确保二叉树的正确性。
阅读全文