#include <stdio.h> #include <stdlib.h> typedef struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; } TreeNode; TreeNode* buildTree(int* preorder, int preorderSize, int* inorder, int inorderSize) { if (preorderSize == 0) { return NULL; } int i; for (i = 0; i < inorderSize; i++) { if (inorder[i] == preorder[0]) { break; } } TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode)); root->val = preorder[0]; root->left = buildTree(preorder + 1, i, inorder, i); root->right = buildTree(preorder + i + 1, preorderSize - i - 1, inorder + i + 1, inorderSize - i - 1); return root; } void inorderTraversal(TreeNode* root) { if (root == NULL) { return; } inorderTraversal(root->left); printf("%d ", root->val); inorderTraversal(root->right); } int main() { int preorder[] = {3, 9, 20, 15, 7}; int inorder[] = {9, 3, 15, 20, 7}; int len = sizeof(preorder) / sizeof(int); TreeNode* root = buildTree(preorder, len, inorder, len); inorderTraversal(root); return 0; }
时间: 2024-03-13 10:44:58 浏览: 110
这段代码使用 C 语言实现了根据前序遍历序列和中序遍历序列构造二叉树,并输出中序遍历结果。
```c
#include <stdio.h> // 导入标准输入输出库
#include <stdlib.h> // 导入标准库
// 定义二叉树结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 定义 buildTree 函数,用于构建二叉树
TreeNode* buildTree(int* preorder, int preorderSize, int* inorder, int inorderSize) {
if (preorderSize == 0) { // 如果前序遍历序列长度为 0,返回空指针
return NULL;
}
int i;
for (i = 0; i < inorderSize; i++) { // 在中序遍历序列中找到根节点的位置
if (inorder[i] == preorder[0]) {
break;
}
}
// 构造根节点
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode)); // 分配内存
root->val = preorder[0]; // 根节点的值为前序遍历序列的第一个元素
// 递归构造左右子树
root->left = buildTree(preorder + 1, i, inorder, i);
root->right = buildTree(preorder + i + 1, preorderSize - i - 1, inorder + i + 1, inorderSize - i - 1);
// 返回根节点
return root;
}
// 定义 inorderTraversal 函数,用于中序遍历二叉树
void inorderTraversal(TreeNode* root) {
if (root == NULL) { // 如果节点为空,直接返回
return;
}
inorderTraversal(root->left); // 中序遍历左子树
printf("%d ", root->val); // 输出节点值
inorderTraversal(root->right); // 中序遍历右子树
}
// 主函数
int main() {
int preorder[] = {3, 9, 20, 15, 7}; // 前序遍历序列
int inorder[] = {9, 3, 15, 20, 7}; // 中序遍历序列
int len = sizeof(preorder) / sizeof(int); // 序列长度
// 构造二叉树
TreeNode* root = buildTree(preorder, len, inorder, len);
// 中序遍历二叉树
inorderTraversal(root);
return 0;
}
```
阅读全文