给定二叉树前序遍历,求中序遍历,用c语言实现
时间: 2023-04-04 20:01:31 浏览: 123
可以使用递归的方式实现,具体步骤如下:
1. 如果前序遍历序列为空,则返回空树。
2. 取出前序遍历序列的第一个元素作为根节点。
3. 在中序遍历序列中找到根节点的位置,将中序遍历序列分为左子树和右子树两部分。
4. 递归地构建左子树和右子树,分别对左子树和右子树进行前序遍历和中序遍历,直到序列为空。
5. 返回根节点。
具体的c语言代码如下:
```c
#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 == ) {
return NULL;
}
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = preorder[];
int i;
for (i = ; i < inorderSize; i++) {
if (inorder[i] == root->val) {
break;
}
}
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;
}
int main() {
int preorder[] = {1, 2, 4, 5, 3, 6, 7};
int inorder[] = {4, 2, 5, 1, 6, 3, 7};
TreeNode* root = buildTree(preorder, 7, inorder, 7);
return ;
}
```
阅读全文