题目:
class Solution { //本题思路:利用中序遍历,从前序遍历中找到左、右子树的根节点
public:
unordered_map<int, int> dic; //创建字典,映射当前根节点在中序遍历中的位置,以便于划分当前根节点的左右子树
vector<int> preorder; //即下面的this->preorder
TreeNode* traversal(int root, int left, int right){ //root是前序遍历中根节点位置,left和right是中序遍历里子树的左右边界
if(left>right) return nullptr; //子树left越过right说明为空
TreeNode* node = new TreeNode(preorder[root]); //创建该子树的根节点
int i = dic[preorder[root]]; //找到根节点在中序遍历里的位置
node->left = traversal(root+1, left, i-1); //左子树的根节点为前序遍历中root+1,子树在中序遍历中的左右边界为left和i-1
node->right = traversal(root+i-left+1, i+1, right); //右子树的根节点为(根节点+左子树长度(i-left)+1),子树在中序遍历中的左右边界为i+1和right
return node; //返回根节点
}
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
this->preorder=preorder;
for(int i=0;i<inorder.size();i++) dic[inorder[i]]=i; //创建映射关系
return traversal(0, 0, inorder.size()-1);
}
};
作者:Krahets
链接:https://leetcode.cn/problems/zhong-jian-er-cha-shu-lcof/solutions/100091/mian-shi-ti-07-zhong-jian-er-cha-shu-di-gui-fa-qin/
来源:力扣(LeetCode)
分类:
算法编程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具