编一个C程序,由中序和前序反向构造一颗二叉树
时间: 2024-05-01 09:20:52 浏览: 7
以下是一个基于递归的C程序,可以根据中序和前序遍历序列反向构造一棵二叉树:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node;
int search(int arr[], int start, int end, int value) {
int i;
for (i = start; i <= end; i++) {
if (arr[i] == value) {
return i;
}
}
}
Node* newNode(int data) {
Node* node = (Node*)malloc(sizeof(Node));
node->data = data;
node->left = NULL;
node->right = NULL;
return node;
}
Node* buildTree(int in[], int pre[], int inStart, int inEnd, int* preIndex) {
if (inStart > inEnd) {
return NULL;
}
Node* node = newNode(pre[*preIndex]);
(*preIndex)++;
if (inStart == inEnd) {
return node;
}
int inIndex = search(in, inStart, inEnd, node->data);
node->left = buildTree(in, pre, inStart, inIndex - 1, preIndex);
node->right = buildTree(in, pre, inIndex + 1, inEnd, preIndex);
return node;
}
void printInorder(Node* node) {
if (node == NULL) {
return;
}
printInorder(node->right);
printf("%d ", node->data);
printInorder(node->left);
}
int main() {
int in[] = { 4, 2, 5, 1, 6, 3 };
int pre[] = { 1, 2, 4, 5, 3, 6 };
int len = sizeof(in) / sizeof(in[0]);
int preIndex = 0;
Node* root = buildTree(in, pre, 0, len - 1, &preIndex);
printf("反向构造的二叉树中序遍历序列为:\n");
printInorder(root);
return 0;
}
```
输入中序遍历序列和前序遍历序列,程序将会构造出一棵二叉树,并打印出它的中序遍历序列(反向构造的结果)。