创建二叉树,分别按照先序、中序、后序、层次遍历二叉树,并打印结果 C语言
时间: 2023-07-10 08:03:14 浏览: 87
以下是二叉树的结构体定义:
```c
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
```
先序遍历的实现:
```c
void preorderTraversal(TreeNode* root) {
if (!root) return;
printf("%d ", root->val);
preorderTraversal(root->left);
preorderTraversal(root->right);
}
```
中序遍历的实现:
```c
void inorderTraversal(TreeNode* root) {
if (!root) return;
inorderTraversal(root->left);
printf("%d ", root->val);
inorderTraversal(root->right);
}
```
后序遍历的实现:
```c
void postorderTraversal(TreeNode* root) {
if (!root) return;
postorderTraversal(root->left);
postorderTraversal(root->right);
printf("%d ", root->val);
}
```
层次遍历的实现(需要借助队列):
```c
void levelOrderTraversal(TreeNode* root) {
if (!root) return;
Queue* queue = createQueue();
enqueue(queue, root);
while (!isEmpty(queue)) {
TreeNode* node = dequeue(queue);
printf("%d ", node->val);
if (node->left) enqueue(queue, node->left);
if (node->right) enqueue(queue, node->right);
}
destroyQueue(queue);
}
```
其中,`Queue` 表示队列的结构体,包括 `createQueue()` 创建队列、`enqueue(queue, value)` 入队、`dequeue(queue)` 出队、`isEmpty(queue)` 判断队列是否为空、`destroyQueue(queue)` 销毁队列等操作。这里不再赘述,可以自行实现或查阅相关资料。
阅读全文