使用c++语言,根据给出的层次遍历次序,创造二叉树
时间: 2023-12-04 07:03:03 浏览: 65
好的,我可以为您解答这个问题。根据层次遍历次序构建二叉树的方法是使用队列。具体步骤如下:
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` 函数是前序遍历二叉树的实现,用于验证构建的二叉树是否正确。
阅读全文