二叉树的基本运算代码c语言
时间: 2023-08-15 09:05:23 浏览: 100
以下是二叉树的基本运算的示例代码(使用 C 语言实现):
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建二叉树
TreeNode* create_tree() {
int value;
scanf("%d", &value);
if (value == -1) {
return NULL;
}
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = value;
root->left = create_tree();
root->right = create_tree();
return root;
}
// 前序遍历二叉树
void preorder_traversal(TreeNode* root) {
if (root == NULL) {
return;
}
printf("%d ", root->val);
preorder_traversal(root->left);
preorder_traversal(root->right);
}
// 中序遍历二叉树
void inorder_traversal(TreeNode* root) {
if (root == NULL) {
return;
}
inorder_traversal(root->left);
printf("%d ", root->val);
inorder_traversal(root->right);
}
// 后序遍历二叉树
void postorder_traversal(TreeNode* root) {
if (root == NULL) {
return;
}
postorder_traversal(root->left);
postorder_traversal(root->right);
printf("%d ", root->val);
}
// 插入节点
TreeNode* insert_node(TreeNode* root, int value) {
if (root == NULL) {
TreeNode* new_node = (TreeNode*)malloc(sizeof(TreeNode));
new_node->val = value;
new_node->left = NULL;
new_node->right = NULL;
return new_node;
}
if (value < root->val) {
root->left = insert_node(root->left, value);
} else if (value > root->val) {
root->right = insert_node(root->right, value);
}
return root;
}
// 删除节点
TreeNode* delete_node(TreeNode* root, int value) {
if (root == NULL) {
return NULL;
}
if (value < root->val) {
root->left = delete_node(root->left, value);
} else if (value > root->val) {
root->right = delete_node(root->right, value);
} else {
if (root->left == NULL) {
return root->right;
}
if (root->right == NULL) {
return root->left;
}
TreeNode* min_node = root->right;
while (min_node->left != NULL) {
min_node = min_node->left;
}
root->val = min_node->val;
root->right = delete_node(root->right, min_node->val);
}
return root;
}
// 查找节点
TreeNode* find_node(TreeNode* root, int value) {
if (root == NULL) {
return NULL;
}
if (value == root->val) {
return root;
} else if (value < root->val) {
return find_node(root->left, value);
} else {
return find_node(root->right, value);
}
}
// 修改节点
void modify_node(TreeNode* root, int old_value, int new_value) {
TreeNode* node = find_node(root, old_value);
if (node != NULL) {
node->val = new_value;
}
}
// 计算二叉树深度
int get_depth(TreeNode* root) {
if (root == NULL) {
return 0;
}
int left_depth = get_depth(root->left);
int right_depth = get_depth(root->right);
return (left_depth > right_depth ? left_depth : right_depth) + 1;
}
// 判断二叉树是否为空
int is_empty(TreeNode* root) {
return root == NULL;
}
// 测试代码
int main() {
TreeNode* root = create_tree();
printf("前序遍历:\n");
preorder_traversal(root);
printf("\n中序遍历:\n");
inorder_traversal(root);
printf("\n后序遍历:\n");
postorder_traversal(root);
root = insert_node(root, 5);
printf("\n插入节点后的中序遍历:\n");
inorder_traversal(root);
root = delete_node(root, 4);
printf("\n删除节点后的中序遍历:\n");
inorder_traversal(root);
TreeNode* node = find_node(root, 3);
if (node != NULL) {
printf("\n查找到节点:%d\n", node->val);
} else {
printf("\n未找到节点\n");
}
modify_node(root, 3, 6);
printf("修改节点后的中序遍历:\n");
inorder_traversal(root);
printf("\n二叉树的深度为:%d\n", get_depth(root));
printf("二叉树是否为空:%d\n", is_empty(root));
return 0;
}
```
注意,以上代码只是示例代码,实际应用中可能需要根据具体需求进行修改。
阅读全文