c语言设计一个算法,由给定的二叉树的二叉链存储结构建立其对应的顺序存储结构。用相关数据进行测试。
时间: 2024-11-25 17:32:00 浏览: 10
在C语言中,我们可以使用递归的方式来设计一个算法,将给定的二叉树的二叉链表存储结构转换成顺序存储结构(也称为数组表示法)。这里有一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建一个新的树节点
TreeNode* newNode(int value) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->data = value;
node->left = NULL;
node->right = NULL;
return node;
}
// 从链表到数组的辅助函数
void inorderToArray(TreeNode* root, int arr[], int& index) {
if (root == NULL)
return;
// 递归左子树
inorderToArray(root->left, arr, index);
// 将当前节点的数据存入数组
arr[index++] = root->data;
// 递归右子树
inorderToArray(root->right, arr, index);
}
// 转换并打印顺序数组
void binaryTreeToArray(TreeNode* root, int size) {
int arr[size]; // 假设我们已知了树的最大深度
int index = 0;
inorderToArray(root, arr, index);
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]); // 打印数组元素
}
printf("\n");
}
// 测试函数
int main() {
// 创建一个示例二叉树
TreeNode* root = newNode(1);
root->left = newNode(2);
root->right = newNode(3);
root->left->left = newNode(4);
root->left->right = newNode(5);
int arraySize = 6; // 假设你知道数组需要的大小
binaryTreeToArray(root, arraySize);
return 0;
}
```
在这个例子中,`binaryTreeToArray` 函数通过递归遍历二叉树,并将节点值添加到顺序数组 `arr` 中。`main` 函数创建了一个简单的二叉树用于测试。
阅读全文