根据前序遍历和中序遍历创建二叉树的代码c语言
时间: 2023-11-11 16:07:42 浏览: 105
以下是根据前序遍历和中序遍历创建二叉树的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
//定义二叉树结构体
typedef struct TreeNode {
char data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
//根据前序遍历和中序遍历构建二叉树
TreeNode* buildTree(char* preorder, char* inorder, int len) {
if (len == 0) {
return NULL;
}
//创建根节点
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->data = *preorder;
root->left = NULL;
root->right = NULL;
//查找根节点在中序遍历中的位置
int rootIndex = 0;
while (*(inorder + rootIndex) != *preorder) {
rootIndex++;
}
//递归创建左子树
root->left = buildTree(preorder + 1, inorder, rootIndex);
//递归创建右子树
root->right = buildTree(preorder + rootIndex + 1, inorder + rootIndex + 1, len - rootIndex - 1);
return root;
}
//后序遍历二叉树
void postorder(TreeNode* root) {
if (root == NULL) {
return;
}
postorder(root->left);
postorder(root->right);
printf("%c ", root->data);
}
int main() {
char preorder[] = "ABDECFG";
char inorder[] = "DBEAFCG";
int len = sizeof(preorder) / sizeof(char) - 1;
//构建二叉树
TreeNode* root = buildTree(preorder, inorder, len);
//后序遍历二叉树
postorder(root);
return 0;
}
```
该代码中使用了递归的思想,先根据前序遍历的第一个节点创建根节点,然后在中序遍历中找到该节点的位置,以此将原问题划分为两个子问题,分别递归构建左子树和右子树。最后使用后序遍历验证构建的二叉树是否正确。
阅读全文