请用c++写一个完全二叉树的代码
时间: 2024-05-08 08:18:39 浏览: 61
以下是一个用 C 语言实现的完全二叉树的代码:
```c
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node *left, *right;
};
// 创建一个新节点
struct node* newNode(int data)
{
struct node* node = (struct node*)malloc(sizeof(struct node));
node->data = data;
node->left = NULL;
node->right = NULL;
return node;
}
// 将数据插入到完全二叉树中
void insert(struct node** root, int data, int* index, int size)
{
// 如果树为空,直接创建一个新节点作为根节点
if (*root == NULL) {
*root = newNode(data);
return;
}
// 如果还没有遍历到最后一层,就递归处理左子树和右子树
if (*index <= size) {
insert(&((*root)->left), data, &(2 * (*index)), size);
insert(&((*root)->right), data, &(2 * (*index) + 1), size);
}
}
// 遍历整个完全二叉树并输出所有节点的值
void traverse(struct node* root)
{
if (root != NULL) {
printf("%d ", root->data);
traverse(root->left);
traverse(root->right);
}
}
int main()
{
int size, data;
struct node* root = NULL;
// 读取输入
printf("请输入完全二叉树的深度:");
scanf("%d", &size);
printf("请输入完全二叉树的结点数据:\n");
for (int i = 1; i <= (1 << size) - 1; i++) {
scanf("%d", &data);
insert(&root, data, &i, size);
}
// 遍历完整个树并输出每个节点的值
printf("完全二叉树的结点值:\n");
traverse(root);
printf("\n");
return 0;
}
```
如果您输入完全二叉树的深度和节点数据,该程序将会输出所有节点的值。该程序会递归地遍历左子树和右子树,将所有数据插入到完全二叉树中。然后,它将遍历整个树并输出所有节点的值。
阅读全文