c++语言进行层次遍历二叉树
时间: 2023-06-05 13:08:37 浏览: 63
好的,我可以回答这个问题。在C语言中,可以使用队列来实现层次遍历二叉树。具体的实现步骤为:首先将根节点入队,然后循环执行以下步骤,直到队列为空:取出队首元素,输出该节点的值,并将其左右子节点依次入队。这样就完成了二叉树的层次遍历。
相关问题
使用C++掌握二叉树的初始化、建立、打印输出二叉树,先序、中序、后序遍历二叉树的递归实现等基本操作,实现二叉树的层次遍历
以下是使用 C 语言实现二叉树的初始化、建立、打印输出二叉树,先序、中序、后序遍历二叉树的递归实现,以及二叉树的层次遍历的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树的结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 初始化二叉树
TreeNode* initTree() {
return NULL;
}
// 递归建立二叉树
TreeNode* createTree() {
TreeNode* root = NULL;
int value;
scanf("%d", &value);
if (value != -1) {
root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = value;
root->left = createTree();
root->right = createTree();
}
return root;
}
// 先序遍历二叉树
void preOrder(TreeNode* root) {
if (root) {
printf("%d ", root->val);
preOrder(root->left);
preOrder(root->right);
}
}
// 中序遍历二叉树
void inOrder(TreeNode* root) {
if (root) {
inOrder(root->left);
printf("%d ", root->val);
inOrder(root->right);
}
}
// 后序遍历二叉树
void postOrder(TreeNode* root) {
if (root) {
postOrder(root->left);
postOrder(root->right);
printf("%d ", root->val);
}
}
// 层次遍历二叉树,借助队列实现
void levelOrder(TreeNode* root) {
if (!root) return;
TreeNode* queue[100];
int front = 0, rear = 0;
queue[rear++] = root;
while (front != rear) {
TreeNode* node = queue[front++];
printf("%d ", node->val);
if (node->left) queue[rear++] = node->left;
if (node->right) queue[rear++] = node->right;
}
}
int main() {
TreeNode* root = initTree();
printf("请输入二叉树的结点,-1表示空结点:\n");
root = createTree();
printf("先序遍历结果:");
preOrder(root);
printf("\n中序遍历结果:");
inOrder(root);
printf("\n后序遍历结果:");
postOrder(root);
printf("\n层次遍历结果:");
levelOrder(root);
printf("\n");
return 0;
}
```
在上述代码中,我们定义了一个二叉树的结构体 `TreeNode`,包含了结点的值 `val`,以及左子树和右子树的指针 `left` 和 `right`。我们通过 `createTree()` 函数递归地建立二叉树,并通过 `preOrder()`、`inOrder()`、`postOrder()` 函数分别实现了先序、中序、后序遍历二叉树的递归操作。最后,我们通过 `levelOrder()` 函数实现了层次遍历二叉树的操作,使用队列来辅助实现。
使用c++语言,根据给出的层次遍历次序,创造二叉树
好的,我可以为您解答这个问题。根据层次遍历次序构建二叉树的方法是使用队列。具体步骤如下:
1. 创建一个队列,将层次遍历次序的第一个元素入队。
2. 然后循环执行以下步骤,直到队列为空:
a. 从队列中取出一个元素作为当前节点。
b. 从层次遍历次序中依次取出该节点的左子节点和右子节点,如果该节点有左子节点或右子节点,则将其入队。
c. 将当前节点和其左右子节点连接起来。
3. 返回根节点,即层次遍历次序的第一个元素。
下面是使用 C++ 语言实现的代码:
```cpp
#include <iostream>
#include <queue>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
TreeNode* createTree(vector<int>& nums) {
if (nums.empty()) return nullptr;
queue<TreeNode*> q;
int i = 0;
TreeNode* root = new TreeNode(nums[i++]);
q.push(root);
while (!q.empty()) {
TreeNode* cur = q.front();
q.pop();
if (i < nums.size()) {
if (nums[i] != -1) {
cur->left = new TreeNode(nums[i]);
q.push(cur->left);
}
i++;
}
if (i < nums.size()) {
if (nums[i] != -1) {
cur->right = new TreeNode(nums[i]);
q.push(cur->right);
}
i++;
}
}
return root;
}
void preOrderTraversal(TreeNode* root) {
if (root == nullptr) return;
cout << root->val << " ";
preOrderTraversal(root->left);
preOrderTraversal(root->right);
}
int main() {
vector<int> nums = {1, 2, 3, 4, -1, 5, 6, -1, -1, 7, -1, -1, -1, -1, -1};
TreeNode* root = createTree(nums);
preOrderTraversal(root); // 输出:1 2 4 5 7 3 6
cout << endl;
return 0;
}
```
这里用 -1 表示空节点。上述代码中的 `createTree` 函数接收一个层次遍历次序的 vector,返回构建的二叉树的根节点。`preOrderTraversal` 函数是前序遍历二叉树的实现,用于验证构建的二叉树是否正确。