二叉树的基本操作源代码C语言
时间: 2023-07-07 12:45:19 浏览: 48
以下是基本操作的二叉树源代码(使用C语言实现):
```c
#include <stdio.h>
#include <stdlib.h>
struct node {
int val;
struct node *left;
struct node *right;
};
struct node *create_node(int val) {
struct node *new_node = (struct node *)malloc(sizeof(struct node));
new_node->val = val;
new_node->left = NULL;
new_node->right = NULL;
return new_node;
}
struct node *insert_node(struct node *node, int val) {
if (!node) {
return create_node(val);
}
if (val < node->val) {
node->left = insert_node(node->left, val);
} else if (val > node->val) {
node->right = insert_node(node->right, val);
}
return node;
}
void inorder_traversal(struct node *node) {
if (!node) {
return;
}
inorder_traversal(node->left);
printf("%d ", node->val);
inorder_traversal(node->right);
}
struct node *delete_node(struct node *node, int val) {
if (!node) {
return node;
}
if (val < node->val) {
node->left = delete_node(node->left, val);
} else if (val > node->val) {
node->right = delete_node(node->right, val);
} else {
if (!node->left) {
struct node *temp = node->right;
free(node);
return temp;
} else if (!node->right) {
struct node *temp = node->left;
free(node);
return temp;
}
struct node *temp = node->right;
while (temp->left) {
temp = temp->left;
}
node->val = temp->val;
node->right = delete_node(node->right, temp->val);
}
return node;
}
struct node *get_min_value_node(struct node *node) {
while (node->left) {
node = node->left;
}
return node;
}
struct node *search_node(struct node *node, int val) {
if (!node) {
return NULL;
}
if (val == node->val) {
return node;
}
if (val < node->val) {
return search_node(node->left, val);
} else {
return search_node(node->right, val);
}
}
struct node *modify_node(struct node *node, int old_val, int new_val) {
if (!node) {
return NULL;
}
node = delete_node(node, old_val);
node = insert_node(node, new_val);
return node;
}
int count_nodes(struct node *node) {
if (!node) {
return 0;
}
return 1 + count_nodes(node->left) + count_nodes(node->right);
}
int get_depth(struct node *node) {
if (!node) {
return 0;
}
int left_depth = get_depth(node->left);
int right_depth = get_depth(node->right);
return (left_depth > right_depth ? left_depth : right_depth) + 1;
}
int main() {
struct node *root = NULL;
root = insert_node(root, 50);
insert_node(root, 30);
insert_node(root, 20);
insert_node(root, 40);
insert_node(root, 70);
insert_node(root, 60);
insert_node(root, 80);
printf("Inorder traversal of binary tree:\n");
inorder_traversal(root);
printf("\nDelete node 20\n");
root = delete_node(root, 20);
printf("Inorder traversal of binary tree after deletion:\n");
inorder_traversal(root);
printf("\nSearch node 40:\n");
struct node *temp = search_node(root, 40);
if (temp) {
printf("Node found: %d\n", temp->val);
} else {
printf("Node not found\n");
}
printf("Modify node 30 to 35:\n");
root = modify_node(root, 30, 35);
printf("Inorder traversal of binary tree after modification:\n");
inorder_traversal(root);
printf("\nNumber of nodes in the binary tree: %d\n", count_nodes(root));
printf("Depth of the binary tree: %d\n", get_depth(root));
return 0;
}
```
上述代码实现了二叉树的节点插入、遍历、删除、查找、修改、计算节点数量和计算树的深度等基本操作。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![torrent](https://img-home.csdnimg.cn/images/20210720083646.png)