c++中如何层序创建二叉树
时间: 2024-05-03 21:21:23 浏览: 46
层序创建二叉树的思路是基于队列实现的。具体步骤如下:
1. 创建一个空队列,用于存储待创建的节点。
2. 读入根节点,并将其加入队列中。
3. 循环执行以下步骤,直到队列为空:
- 从队列中取出一个节点,作为当前节点。
- 读入当前节点的左子节点,如果不为空,创建该节点并将其加入队列中。
- 读入当前节点的右子节点,如果不为空,创建该节点并将其加入队列中。
4. 返回根节点。
代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 层序创建二叉树
TreeNode* createTree() {
TreeNode *root = NULL;
TreeNode *node, *cur;
int val;
printf("请输入根节点的值:");
scanf("%d", &val);
if (val == -1) {
return NULL;
}
root = (TreeNode*)malloc(sizeof(TreeNode));
root->data = val;
root->left = NULL;
root->right = NULL;
// 创建队列
TreeNode **queue = (TreeNode**)malloc(sizeof(TreeNode*) * 100);
int front = 0, rear = 0;
queue[rear++] = root;
while (front != rear) {
cur = queue[front++];
printf("请输入%d的左子节点的值:", cur->data);
scanf("%d", &val);
if (val != -1) {
node = (TreeNode*)malloc(sizeof(TreeNode));
node->data = val;
node->left = NULL;
node->right = NULL;
cur->left = node;
queue[rear++] = node;
}
printf("请输入%d的右子节点的值:", cur->data);
scanf("%d", &val);
if (val != -1) {
node = (TreeNode*)malloc(sizeof(TreeNode));
node->data = val;
node->left = NULL;
node->right = NULL;
cur->right = node;
queue[rear++] = node;
}
}
free(queue);
return root;
}
int main() {
TreeNode *root = createTree();
return 0;
}
```
阅读全文