用C语言写一段代码,二叉树节点是char类型,实现二叉树节点的删除操作。具体过程为根据输入的节点创建二叉树,再次输入一个二叉树中某个节点的值,在二叉树中找到该节点,删除该节点的左子树
时间: 2023-10-10 11:04:29 浏览: 49
C语言实现二叉树的创建、插入、删除、遍历等操作
5星 · 资源好评率100%
下面是一份基于C语言的二叉树节点删除代码,实现了删除某个节点的左子树。
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
char value;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
TreeNode* createNode(char value) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->value = value;
node->left = NULL;
node->right = NULL;
return node;
}
TreeNode* insertNode(TreeNode* root, char value) {
if (root == NULL) {
return createNode(value);
}
if (value < root->value) {
root->left = insertNode(root->left, value);
} else if (value > root->value) {
root->right = insertNode(root->right, value);
}
return root;
}
void inorderTraversal(TreeNode* root) {
if (root != NULL) {
inorderTraversal(root->left);
printf("%c ", root->value);
inorderTraversal(root->right);
}
}
TreeNode* deleteLeftSubtree(TreeNode* root, char value) {
if (root == NULL) {
return NULL;
}
if (root->value == value) {
if (root->left != NULL) {
free(root->left);
root->left = NULL;
} else {
printf("Node %c does not have a left subtree\n", value);
}
} else if (value < root->value) {
root->left = deleteLeftSubtree(root->left, value);
} else {
root->right = deleteLeftSubtree(root->right, value);
}
return root;
}
int main() {
TreeNode* root = NULL;
char input;
printf("Please input a value to create the root: ");
scanf("%c", &input);
root = insertNode(root, input);
while (getchar() != '\n');
printf("Please input values to create the binary tree (end with a space and Enter): ");
while (scanf("%c", &input) != EOF && input != ' ') {
root = insertNode(root, input);
}
while (getchar() != '\n');
printf("The binary tree in inorder traversal is: ");
inorderTraversal(root);
printf("\n");
printf("Please input a value to delete its left subtree: ");
scanf("%c", &input);
root = deleteLeftSubtree(root, input);
printf("The binary tree after deleting left subtree of node %c in inorder traversal is: ", input);
inorderTraversal(root);
printf("\n");
return 0;
}
```
代码的核心操作是 `deleteLeftSubtree` 函数,其中:
- 如果当前节点就是要删除的节点,则判断其左子树是否存在,如果存在就释放掉,并将其左子树指针设为 NULL。
- 如果当前节点不是要删除的节点,则递归调用函数,直到找到要删除的节点为止。
在 `main` 函数中,我们首先输入一个值作为根节点,再输入一些值来创建二叉树。然后,我们输入一个要删除的节点的值,并调用 `deleteLeftSubtree` 函数来删除该节点的左子树。最后,输出删除后的二叉树的中序遍历结果。
阅读全文