完全二叉树的创建代码
时间: 2023-12-18 18:27:34 浏览: 25
以下是完全二叉树的创建代码示例:
```python
class Node:
def __init__(self, val):
self.left = None
self.right = None
self.val = val
def insertLevelOrder(arr, root, i, n):
if i < n:
temp = Node(arr[i])
root = temp
root.left = insertLevelOrder(arr, root.left, 2 * i + 1, n)
root.right = insertLevelOrder(arr, root.right, 2 * i + 2, n)
return root
def inorderTraversal(root):
if root:
inorderTraversal(root.left)
print(root.val)
inorderTraversal(root.right)
# 示例
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
n = len(arr)
root = None
root = insertLevelOrder(arr, root, 0, n)
inorderTraversal(root)
```
相关问题
写一个基于刚才结点结构体的完全二叉树创建代码
好的,下面是一个基于刚才的结点结构体定义的完全二叉树创建代码,可以根据用户输入的数据构建一棵完全二叉树:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef int TElemType;
typedef struct BiTNode {
TElemType data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
// 队列结构体
typedef struct {
BiTree data[MAX_SIZE];
int front, rear;
} Queue;
// 初始化队列
void initQueue(Queue *q) {
q->front = q->rear = 0;
}
// 判断队列是否为空
int isEmpty(Queue *q) {
return q->front == q->rear;
}
// 入队
int enQueue(Queue *q, BiTree t) {
if ((q->rear + 1) % MAX_SIZE == q->front) return 0; // 队满
q->data[q->rear] = t;
q->rear = (q->rear + 1) % MAX_SIZE;
return 1;
}
// 出队
int deQueue(Queue *q, BiTree *t) {
if (isEmpty(q)) return 0; // 队空
*t = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
return 1;
}
// 创建完全二叉树
void createCompleteBiTree(BiTree *root) {
Queue q;
initQueue(&q);
*root = NULL;
TElemType data;
printf("请输入完全二叉树的结点数据,以 -1 结束:\n");
while (scanf("%d", &data) != EOF && data != -1) {
BiTree node = (BiTree) malloc(sizeof(BiNode));
node->data = data;
node->lchild = node->rchild = NULL;
enQueue(&q, node);
if (*root == NULL) {
*root = node;
} else {
BiTree front;
if (deQueue(&q, &front)) {
if (front->lchild == NULL) {
front->lchild = node;
} else if (front->rchild == NULL) {
front->rchild = node;
}
enQueue(&q, front);
}
}
}
}
// 中序遍历
void inOrderTraverse(BiTree root) {
if (root == NULL) return;
inOrderTraverse(root->lchild);
printf("%d ", root->data);
inOrderTraverse(root->rchild);
}
int main() {
BiTree root;
createCompleteBiTree(&root);
printf("中序遍历结果:\n");
inOrderTraverse(root);
printf("\n");
return 0;
}
```
这个代码使用队列实现了完全二叉树的创建,用户输入数据时按照完全二叉树的顺序插入节点,同时使用队列记录每个节点的位置,便于后续操作。最后使用中序遍历对创建好的完全二叉树进行遍历,输出结果。
如何后序建立完全二叉树给出代码
以下是一个基于数组实现的完全二叉树的建立代码:
```
#include <iostream>
using namespace std;
const int MAXN = 100005; // 定义二叉树的最大节点数
int n; // 节点数
int a[MAXN]; // 存放二叉树节点数据的数组
int tree[MAXN]; // 完全二叉树实现所用的数组
void build(int pos, int index) {
if (index > n) return; // 索引越界,递归结束
tree[pos] = a[index]; // 将节点数据存入二叉树数组
build(pos * 2, index * 2); // 递归建立左子树
build(pos * 2 + 1, index * 2 + 1); // 递归建立右子树
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
build(1, 1);
for (int i = 1; i <= n; i++)
cout << tree[i] << " "; // 输出建立完成的完全二叉树数组
cout << endl;
return 0;
}
```
希望能帮到您,如果您还有问题,可以继续向我提问哦。