根据中序遍历和父节点信息重建二叉树给一个c++代码
时间: 2024-10-20 12:16:22 浏览: 30
二叉树的创建与遍历简介
在C++中,我们可以使用递归的方式来根据中序遍历的结果以及每个节点的父节点信息重建二叉搜索树(BST)。这里提供一个简单的示例代码:
```cpp
#include <vector>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder, int inStart, int inEnd) {
if (inStart > inEnd)
return NULL;
// 获取postorder中的当前节点值,这是根节点
int rootVal = postorder[postorder.size() - 1];
int rootIndex = find(inorder.begin(), inorder.end(), rootVal);
// 创建根节点
TreeNode *root = new TreeNode(rootVal);
// 更新postorder数组的范围,去掉已经处理过的根节点
postorder.pop_back();
// 递归地构建左子树和右子树
root->left = buildTree(inorder, postorder, inStart, rootIndex - 1);
root->right = buildTree(inorder, postorder, rootIndex + 1, inEnd);
return root;
}
// 主函数示例,你需要提供inorder和postorder两个向量作为输入
int main() {
vector<int> inorder = {9, 3, 15, 20, 7};
vector<int> postorder = {9, 15, 7, 20, 3}; // 注意后序遍历的顺序
auto root = buildTree(inorder, postorder, 0, inorder.size() - 1);
// 现在你可以用root来操作重建的二叉树了
// ...
return 0;
}
```
这个函数`buildTree`接收中序遍历(inorder)和后序遍历(postorder),利用后序遍历最后一个元素找到根节点,然后递归地处理左右子树。注意中序遍历的特点是先遍历左子树,然后访问根节点,最后遍历右子树。
阅读全文