二叉树的遍历是一个常见问题,主要包括先序遍历、中序遍历、后序遍历和层次遍历。
先序遍历的顺序是:首先访问根节点,然后遍历左子树,最后遍历右子树。例如,对于二叉
树{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},先序遍历的结果为:{0, 2, 4, 1, 3, 6, 5, 7, 8, 9}。
中序遍历的顺序是:首先遍历左子树,然后访问根节点,最后遍历右子树。对于上述二叉树,
中序遍历的结果为:{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}。
后序遍历的顺序是:首先遍历左子树,然后遍历右子树,最后访问根节点。对于上述二叉树,
后序遍历的结果为:{1, 3, 2, 6, 5, 9, 8, 7, 4, 0}。
层次遍历(也称为广度优先搜索)的顺序是:首先访问根节点,然后访问所有左子树的节点,
再访问所有右子树的节点。对于上述二叉树,层次遍历的结果为:{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}。
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建新节点
TreeNode* newNode(int data) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = data;
node->left = NULL;
node->right = NULL;
return node;
}
// 先序遍历
void preOrderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
printf("%d ", root->val);
preOrderTraversal(root->left);
preOrderTraversal(root->right);
}
// 中序遍历