帮我用c语言写一个完整的二叉树功能代码,包括前序、中序、后序、层序的创建二叉树、遍历,销毁,输出方法包括前序、中序、后序、层序的创建二叉树、遍历,销毁,输出方法
时间: 2023-12-22 14:05:23 浏览: 97
好的,以下是一个完整的二叉树代码实现,包括二叉树的创建、遍历、销毁和输出。
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node *left;
struct node *right;
} Node;
Node* createNode(int data) {
Node* newNode = (Node*) malloc(sizeof(Node));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
Node* createBinaryTree() {
Node* root = NULL;
int data;
printf("Enter data (-1 for no node): ");
scanf("%d", &data);
if (data == -1) {
return NULL;
}
root = createNode(data);
printf("Enter left node of %d:\n", data);
root->left = createBinaryTree();
printf("Enter right node of %d:\n", data);
root->right = createBinaryTree();
return root;
}
void preOrderTraversal(Node* root) {
if (root == NULL) {
return;
}
printf("%d ", root->data);
preOrderTraversal(root->left);
preOrderTraversal(root->right);
}
void inOrderTraversal(Node* root) {
if (root == NULL) {
return;
}
inOrderTraversal(root->left);
printf("%d ", root->data);
inOrderTraversal(root->right);
}
void postOrderTraversal(Node* root) {
if (root == NULL) {
return;
}
postOrderTraversal(root->left);
postOrderTraversal(root->right);
printf("%d ", root->data);
}
void levelOrderTraversal(Node* root) {
if (root == NULL) {
return;
}
Node* queue[100];
int front = -1, rear = -1;
queue[++rear] = root;
while (front != rear) {
Node* current = queue[++front];
printf("%d ", current->data);
if (current->left != NULL) {
queue[++rear] = current->left;
}
if (current->right != NULL) {
queue[++rear] = current->right;
}
}
}
void destroyBinaryTree(Node* root) {
if (root == NULL) {
return;
}
destroyBinaryTree(root->left);
destroyBinaryTree(root->right);
free(root);
}
int main() {
Node* root = createBinaryTree();
printf("Pre-order traversal: ");
preOrderTraversal(root);
printf("\nIn-order traversal: ");
inOrderTraversal(root);
printf("\nPost-order traversal: ");
postOrderTraversal(root);
printf("\nLevel-order traversal: ");
levelOrderTraversal(root);
printf("\n");
destroyBinaryTree(root);
return 0;
}
```
使用方法:
1. 运行程序,按照提示输入节点数据(-1 表示该节点不存在)。
2. 程序会根据输入的数据创建二叉树。
3. 程序会依次输出二叉树的前序、中序、后序和层序遍历结果。
4. 程序会销毁二叉树。
阅读全文
相关推荐
















