c++二叉树层序构造
时间: 2024-03-14 22:41:49 浏览: 110
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* constructBinaryTree(vector<int>& nums) {
if (nums.empty()) {
return nullptr;
}
// 使用队列辅助进行层序构造
queue<TreeNode*> q;
TreeNode* root = new TreeNode(nums[0]);
q.push(root);
int i = 1;
while (!q.empty() && i < nums.size()) {
TreeNode* node = q.front();
q.pop();
// 构造左子节点
if (i < nums.size() && nums[i] != -1) {
node->left = new TreeNode(nums[i]);
q.push(node->left);
}
i++;
// 构造右子节点
if (i < nums.size() && nums[i] != -1) {
node->right = new TreeNode(nums[i]);
q.push(node->right);
}
i++;
}
return root;
}
// 层序遍历二叉树(用于验证构造结果)
void levelOrderTraversal(TreeNode* root) {
if (root == nullptr) {
return;
}
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
TreeNode* node = q.front();
q.pop();
cout << node->val << " ";
if (node->left != nullptr) {
q.push(node->left);
}
if (node->right != nullptr) {
q.push(node->right);
}
}
}
int main() {
// 示例输入:[1, 2, 3, 4, 5, -1, 6]
vector<int> nums = {1, 2, 3, 4, 5, -1, 6};
TreeNode* root = constructBinaryTree(nums);
cout << "层序遍历结果:";
levelOrderTraversal(root);
return 0;
}
```
在上述示例代码中,我们首先定义了二叉树节点的结构体`TreeNode`,包含一个整数值`val`以及左右子节点的指针。然后,我们使用队列`queue`来辅助进行层序构造。在构造过程中,我们依次从输入数组`nums`中取出元素,并根据规则构造二叉树的左右子节点。最后,我们通过层序遍历验证了构造结果。
阅读全文