c语言生成完全二叉树
时间: 2023-07-13 09:18:54 浏览: 110
生成完全二叉树的方法有很多,下面是一种基于数组表示的方法,使用C语言实现。
假设完全二叉树的节点编号从1开始,对于编号为i的节点,它的左孩子节点编号为2*i,右孩子节点编号为2*i+1。根据这个规律,我们可以利用数组来存储完全二叉树,数组的下标对应节点编号,数组元素存储节点的值。
下面是一个生成完全二叉树的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 通过数组生成完全二叉树
TreeNode* createCompleteBinaryTree(int* arr, int size, int index) {
if (index > size) return NULL; // 数组下标越界,返回空节点
if (arr[index - 1] == -1) return NULL; // 数组元素为-1,表示空节点,返回空节点
// 创建当前节点
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = arr[index - 1];
// 递归创建左右子树
node->left = createCompleteBinaryTree(arr, size, 2 * index);
node->right = createCompleteBinaryTree(arr, size, 2 * index + 1);
return node;
}
// 先序遍历二叉树
void preorder(TreeNode* root) {
if (root == NULL) return;
printf("%d ", root->val);
preorder(root->left);
preorder(root->right);
}
int main() {
int arr[MAX_SIZE] = { 1, 2, 3, 4, 5, 6, 7 }; // 完全二叉树的数组表示
int size = 7; // 数组大小
TreeNode* root = createCompleteBinaryTree(arr, size, 1);
preorder(root); // 输出先序遍历结果:1 2 4 5 3 6 7
return 0;
}
```
上面的代码中,我们通过createCompleteBinaryTree函数来生成完全二叉树,传入参数为数组、数组大小和根节点的编号(即1)。在函数内部,我们首先判断当前节点是否为空,如果为空则返回空节点。否则,我们创建当前节点,然后递归创建左右子树。
最后,我们通过preorder函数来输出二叉树的先序遍历结果。
阅读全文