106. 从中序与后序遍历序列构造二叉树 105. 从前序与中序遍历序列构造二叉树
给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗二叉树 。
class Solution {
public:
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
if (postorder.size() == 0) return NULL;
TreeNode* root = new TreeNode(postorder.back());
if (postorder.size() == 1) return root;
auto it = find(inorder.begin(),inorder.end(),root->val);
vector<int> left_inorder(inorder.begin(),it);
vector<int> right_inorder(it+1,inorder.end());
int dis = distance(inorder.begin(),it);
it = postorder.begin() + dis;
vector<int> left_postorder(postorder.begin(),it);
vector<int> right_postorder(it,postorder.end()-1);
if(left_inorder.size())
{
root->left = buildTree(left_inorder,left_postorder);
}
if(right_inorder.size())
{
root->right = buildTree(right_inorder,right_postorder);
}
return root;
}
};
给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。
class Solution {
public:
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
if (preorder.size() == 0) return NULL;
TreeNode* root = new TreeNode(preorder.front());
if (preorder.size() == 1) return root;
auto it = find(inorder.begin(),inorder.end(),root->val);
vector<int> left_inorder(inorder.begin(),it);
vector<int> right_inorder(it+1,inorder.end());
int dis = distance(inorder.begin(),it);
it = preorder.begin() + 1 + dis;
vector<int> left_preorder(preorder.begin()+1,it);
vector<int> right_preorder(it,preorder.end());
if(left_inorder.size())
{
root->left = buildTree(left_preorder,left_inorder);
}
if(right_inorder.size())
{
root->right = buildTree(right_preorder,right_inorder);
}
return root;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理