根据所输入二叉树的先序序列来构建二叉树,并实现二叉树的先 序遍历,中序遍历和后序遍历算法并加以验证。C语言
时间: 2024-12-15 08:27:17 浏览: 12
在C语言中,你可以通过递归的方式来根据先序遍历序列重建二叉树,并实现三种基本的遍历方法。这里是一个简单的例子:
首先,我们需要定义一个二叉树节点结构体:
```c
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
```
然后,我们可以创建一个函数来根据先序遍历重建二叉树:
```c
TreeNode* buildTree(int preorder[], int n) {
if (n == 0) return NULL;
TreeNode* root = new TreeNode(preorder[0]);
int index = 1;
for (int i = 1; i < n; ++i) {
if (preorder[index] < preorder[0]) { // 根据先序遍历判断左子树
root->left = buildTree(&preorder[index], n - index);
index++;
} else { // 右子树
root->right = buildTree(&preorder[index], n - index);
break;
}
}
return root;
}
```
接下来,我们分别实现先序、中序和后序遍历:
- 先序遍历(根-左-右)
```c
void preOrder(TreeNode* node) {
if (node != NULL) {
printf("%d ", node->val); // 打印节点值
preOrder(node->left);
preOrder(node->right);
}
}
```
- 中序遍历(左-根-右)
```c
void inOrder(TreeNode* node) {
if (node != NULL) {
inOrder(node->left);
printf("%d ", node->val);
inOrder(node->right);
}
}
```
- 后序遍历(左-右-根)
```c
void postOrder(TreeNode* node) {
if (node != NULL) {
postOrder(node->left);
postOrder(node->right);
printf("%d ", node->val);
}
}
```
为了验证这些遍历,你需要创建一个测试二叉树,例如给定先序遍历 `[5, 3, 2, 7, 4, 6, 8]`,然后按照上述步骤构建树并运行遍历函数。
阅读全文