用c++写一个根据先序中序排列创建二叉树
时间: 2023-06-03 17:04:26 浏览: 92
好的,我可以为您提供一个实现先序中序构建二叉树的C语言代码:
```c
#include<stdio.h>
#include<stdlib.h>
/* 定义二叉树节点 */
struct TreeNode {
char val;
struct TreeNode *left;
struct TreeNode *right;
};
/* 根据先序和中序遍历结果构建二叉树 */
struct TreeNode* buildTree(char* preorder, char* inorder, int inorder_start, int inorder_end) {
static int preorder_index = 0;
if (inorder_start > inorder_end) {
return NULL;
}
struct TreeNode* node = (struct TreeNode*)malloc(sizeof(struct TreeNode));
if (!node) {
return NULL;
}
node->val = preorder[preorder_index];
preorder_index++;
int inorder_index = inorder_start;
while (inorder_index <= inorder_end && inorder[inorder_index] != node->val) {
inorder_index++;
}
node->left = buildTree(preorder, inorder, inorder_start, inorder_index - 1);
node->right = buildTree(preorder, inorder, inorder_index + 1, inorder_end);
return node;
}
/* 打印二叉树 */
void printTree(struct TreeNode* node) {
if (!node) {
return;
}
printf("%c ", node->val);
printTree(node->left);
printTree(node->right);
}
int main() {
char preorder[] = {'A', 'B', 'D', 'E', 'C', 'F', 'G'}; // 先序遍历结果
char inorder[] = {'D', 'B', 'E', 'A', 'F', 'C', 'G'}; // 中序遍历结果
int inorder_len = sizeof(inorder) / sizeof(inorder[0]); // 中序遍历结果的长度
struct TreeNode* root = buildTree(preorder, inorder, 0, inorder_len - 1); // 构建二叉树
printf("先序遍历结果为: ");
printTree(root);
return 0;
}
```
该代码为您提供了一个使用先序和中序遍历结果构建二叉树并输出先序遍历结果的示例。请记得根据您的具体需求修改代码,并根据实际情况选择合适的变量名。如果您对代码有任何疑问,请随时提出。
阅读全文