使用 C 语言求给定一个满二叉树先树先遍历的输出结果,求该树中序遍历的输出结果
时间: 2023-04-04 17:01:21 浏览: 150
可以使用递归的方式求解该满二叉树的中序遍历输出结果。具体步骤如下:
1. 如果该树为空,则返回空序列。
2. 对该树的左子树进行中序遍历,得到左子树的中序遍历序列。
3. 将该树的根节点加入中序遍历序列中。
4. 对该树的右子树进行中序遍历,得到右子树的中序遍历序列。
5. 将左子树的中序遍历序列、根节点和右子树的中序遍历序列依次连接起来,得到该树的中序遍历输出结果。
注意,这里假设满二叉树的先序遍历序列已知,如果先序遍历序列未知,则需要先进行先序遍历,再进行中序遍历。
具体实现可以参考以下代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 递归求解中序遍历序列
int* inorderTraversal(TreeNode* root, int* returnSize) {
if (root == NULL) {
*returnSize = ;
return NULL;
}
int leftSize, rightSize;
int* left = inorderTraversal(root->left, &leftSize);
int* right = inorderTraversal(root->right, &rightSize);
*returnSize = leftSize + rightSize + 1;
int* res = (int*)malloc(*returnSize * sizeof(int));
for (int i = ; i < leftSize; i++) {
res[i] = left[i];
}
res[leftSize] = root->val;
for (int i = ; i < rightSize; i++) {
res[leftSize + 1 + i] = right[i];
}
free(left);
free(right);
return res;
}
int main() {
// 构造一个满二叉树
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = 1;
root->left = (TreeNode*)malloc(sizeof(TreeNode));
root->left->val = 2;
root->left->left = (TreeNode*)malloc(sizeof(TreeNode));
root->left->left->val = 4;
root->left->left->left = NULL;
root->left->left->right = NULL;
root->left->right = (TreeNode*)malloc(sizeof(TreeNode));
root->left->right->val = 5;
root->left->right->left = NULL;
root->left->right->right = NULL;
root->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->val = 3;
root->right->left = (TreeNode*)malloc(sizeof(TreeNode));
root->right->left->val = 6;
root->right->left->left = NULL;
root->right->left->right = NULL;
root->right->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->right->val = 7;
root->right->right->left = NULL;
root->right->right->right = NULL;
// 求解中序遍历序列
int size;
int* res = inorderTraversal(root, &size);
// 输出中序遍历序列
printf("中序遍历序列为:");
for (int i = ; i < size; i++) {
printf("%d ", res[i]);
}
printf("\n");
// 释放内存
free(root->left->left);
free(root->left->right);
free(root->left);
free(root->right->left);
free(root->right->right);
free(root->right);
free(root);
free(res);
return ;
}
```
阅读全文