c++现有一颗二叉搜索树,输入这棵树的后序遍历,输出层序遍历结果
时间: 2024-04-22 07:24:43 浏览: 14
你好!输入一棵二叉搜索树的后序遍历,我们可以通过构建这棵树并进行层序遍历来得到结果。下面是一个C++的实现示例:
```cpp
#include <iostream>
#include <queue>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
TreeNode* buildTree(vector<int>& postorder) {
if (postorder.empty()) {
return NULL;
}
int n = postorder.size();
TreeNode* root = new TreeNode(postorder[n - 1]);
vector<int> leftSubTree, rightSubTree;
int i = 0;
while (i < n - 1 && postorder[i] < root->val) {
leftSubTree.push_back(postorder[i]);
i++;
}
while (i < n - 1 && postorder[i] > root->val) {
rightSubTree.push_back(postorder[i]);
i++;
}
root->left = buildTree(leftSubTree);
root->right = buildTree(rightSubTree);
return root;
}
vector<int> levelOrder(TreeNode* root) {
vector<int> result;
if (root == NULL) {
return result;
}
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
TreeNode* curr = q.front();
q.pop();
result.push_back(curr->val);
if (curr->left) {
q.push(curr->left);
}
if (curr->right) {
q.push(curr->right);
}
}
return result;
}
vector<int> getLevelOrderTraversal(vector<int>& postorder) {
TreeNode* root = buildTree(postorder);
vector<int> result = levelOrder(root);
return result;
}
int main() {
vector<int> postorder = {2, 4, 3, 8, 7, 5};
vector<int> levelOrderTraversal = getLevelOrderTraversal(postorder);
cout << "Level Order Traversal: ";
for (int num : levelOrderTraversal) {
cout << num << " ";
}
return 0;
}
```
这段代码首先定义了一个树节点结构 `TreeNode` ,其中包含了节点的值以及左右子节点的指针。然后,通过后序遍历的结果构建二叉搜索树的函数 `buildTree` ,该函数递归地构建左子树和右子树,并将其连接到根节点上。接下来,使用队列实现的层序遍历函数 `levelOrder` 来获取层序遍历结果。最后,在 `main` 函数中调用 `getLevelOrderTraversal` 函数,传入后序遍历结果,得到层序遍历结果并输出。
以上是一种可能的实现方式,希望能对你有所帮助!如果有任何疑问,请随时提出。