c++ 完全二叉树创建
时间: 2023-11-05 15:55:17 浏览: 218
c++创建二叉树
完全二叉树是一种特殊的二叉树,它的每一层都被完全填满,除了最后一层可能不满。在创建完全二叉树时,可以按照层次遍历的顺序依次插入节点。
创建完全二叉树的步骤如下:
1. 创建一个空的二叉树。
2. 创建根节点,并将其插入到二叉树中。
3. 按层次顺序遍历二叉树,从根节点开始,依次遍历每个节点。
4. 对于当前遍历的节点,如果它的左子节点为空,则创建一个新的节点,并将其作为当前节点的左子节点;如果它的右子节点为空,则创建一个新的节点,并将其作为当前节点的右子节点。
5. 重复步骤4,直到所有节点都被插入到二叉树中。
下面是用C语言实现创建完全二叉树的示例代码:
```
// 树节点的定义
struct bstree_node {
int data;
struct bstree_node* left;
struct bstree_node* right;
};
// 创建完全二叉树
struct bstree_node* create_complete_binary_tree(int arr[], int n) {
if (n == 0) {
return NULL;
}
// 创建根节点
struct bstree_node* root = (struct bstree_node*)malloc(sizeof(struct bstree_node));
root->data = arr[0];
root->left = NULL;
root->right = NULL;
// 创建一个队列,用于存储待插入节点的父节点
struct bstree_node* queue[n];
int front = 0;
int rear = 0;
queue[rear++] = root;
// 遍历数组,依次插入节点
for (int i = 1; i < n; i++) {
// 取出队列中的父节点
struct bstree_node* parent = queue[front++];
// 创建左子节点
struct bstree_node* left_child = (struct bstree_node*)malloc(sizeof(struct bstree_node));
left_child->data = arr[i];
left_child->left = NULL;
left_child->right = NULL;
parent->left = left_child;
// 将左子节点入队
queue[rear++] = left_child;
// 判断是否还有剩余节点待插入
if (i + 1 < n) {
// 创建右子节点
struct bstree_node* right_child = (struct bstree_node*)malloc(sizeof(struct bstree_node));
right_child->data = arr[i + 1];
right_child->left = NULL;
right_child->right = NULL;
parent->right = right_child;
// 将右子节点入队
queue[rear++] = right_child;
// 跳过右子节点,继续遍历下一个节点
i++;
}
}
return root;
}
```
请注意,上述代码中的`arr`是一个整型数组,包含了待插入二叉树中的节点值。在函数调用时,需要提供该数组以及数组的长度`n`。
阅读全文