C语言实现根据key值进行二叉树的插入,循环删除最后一个二叉树节点
时间: 2024-05-03 10:22:14 浏览: 93
C语言编写的二叉排序树的插入、删除
4星 · 用户满意度95%
以下是C语言实现根据key值进行二叉树的插入,循环删除最后一个二叉树节点的代码:
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
int key;
struct Node *left;
struct Node *right;
};
struct Node *createNode(int key) {
struct Node *node = (struct Node*) malloc(sizeof(struct Node));
node->key = key;
node->left = NULL;
node->right = NULL;
return node;
}
struct Node *insertNode(struct Node *node, int key) {
if (node == NULL) {
return createNode(key);
} else if (key < node->key) {
node->left = insertNode(node->left, key);
} else if (key > node->key) {
node->right = insertNode(node->right, key);
}
return node;
}
struct Node *deleteNode(struct Node *root) {
if (root == NULL) {
return NULL;
} else if (root->left == NULL && root->right == NULL) {
free(root);
return NULL;
} else if (root->left == NULL) {
struct Node *temp = root->right;
free(root);
return temp;
} else if (root->right == NULL) {
struct Node *temp = root->left;
free(root);
return temp;
} else {
struct Node *temp = root->right;
while (temp->left != NULL) {
temp = temp->left;
}
root->key = temp->key;
root->right = deleteNode(root->right);
return root;
}
}
void printInorder(struct Node *node) {
if (node != NULL) {
printInorder(node->left);
printf("%d ", node->key);
printInorder(node->right);
}
}
int main() {
struct Node *root = NULL;
int key, choice;
do {
printf("\n1. Insert Node");
printf("\n2. Delete Last Node");
printf("\n3. Display");
printf("\n4. Exit");
printf("\nEnter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("\nEnter the key to be inserted: ");
scanf("%d", &key);
root = insertNode(root, key);
break;
case 2:
root = deleteNode(root);
break;
case 3:
printf("\nInorder Traversal: ");
printInorder(root);
break;
case 4:
exit(0);
default:
printf("\nInvalid Choice!");
}
} while (choice != 4);
return 0;
}
```
上述代码中,我们定义了一个`Node`结构体表示二叉树节点,其中包含了节点的键值`key`和左右子节点指针`left`和`right`。`createNode`函数用于创建一个新节点,`insertNode`函数用于将节点插入到二叉树中,根据键值的大小关系判断应该插入到左子树还是右子树。`deleteNode`函数用于删除最后一个节点,如果该节点没有子节点则直接释放该节点,如果有一个子节点则用该子节点替换该节点,如果有两个子节点则找到右子树中最小的节点替换该节点。`printInorder`函数用于中序遍历二叉树并打印节点的键值。
在`main`函数中,我们使用一个循环来读取用户的操作选择,1表示插入节点,2表示删除最后一个节点,3表示打印二叉树中所有节点的键值,4表示退出程序。循环中根据用户的选择调用相应的函数来完成操作。
阅读全文