LeetCode 105. 从前序与中序遍历序列构造二叉树

另一个同源的题目:LeetCode 106. 从中序与后序遍历序列构造二叉树


思路都一样,只是找root的方式不同。

cpp 复制代码
class Solution {
public:
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        if(preorder.size() == 0)       return NULL;
        
        int rootVal = preorder[0];
        TreeNode* root = new TreeNode(rootVal);             //自己构建新树
        if(preorder.size() == 1)       return root;
        
        auto iter = find(inorder.begin(), inorder.end(), rootVal); 
        int pivot = iter - inorder.begin();     //找到根结点在中序数组的下标,作为后续分割依据
        
        //切割前序数组,将这层preorder的两个子序列传给下一层
        vector<int> leftPreOrder(preorder.begin() + 1, preorder.begin() + pivot + 1);
        vector<int> rightPreOrder(preorder.begin() + pivot + 1, preorder.end());
        
        //切割中序数组,将这层inorder的两个子序列传给下一层
        vector<int> leftInOrder(inorder.begin(), inorder.begin() + pivot);       //左边[)
        vector<int> rightInOrder(inorder.begin() + pivot + 1, inorder.end());    //右边(]

        root -> left = buildTree(leftPreOrder, leftInOrder);
        root -> right = buildTree(rightPreOrder, rightInOrder);
        return root;
    }
};
相关推荐
水木流年追梦2 分钟前
大模型入门-应用篇3-Agent智能体
开发语言·python·算法·leetcode·正则表达式
洛水水12 分钟前
【力扣100题】31.二叉树的层序遍历
算法·leetcode·职场和发展
君义_noip18 分钟前
CSP-S 2025 入门级 第一轮(初赛) 完善程序(1)
c++·算法·信息学奥赛·初赛·csp 第一轮
洛水水21 分钟前
【力扣100题】41.爬楼梯
算法·leetcode·职场和发展
Pkmer1 小时前
LeetCode 上极少见的工程级滑窗实现
python·leetcode
蜡笔小马2 小时前
07.C++设计模式-组合模式
c++·设计模式·组合模式
sheeta19982 小时前
LeetCode 每日一题笔记 日期:2026.05.13 题目:1674. 使数组互补的最少操作次数
笔记·算法·leetcode
liulilittle2 小时前
TCP UCP v1.0:BBR 的非破坏性约束层
网络·c++·网络协议·tcp/ip·算法·c·通信
每天回答3个问题2 小时前
LeetCodeHot100|回溯算法、46.全排列、78.子集、17.电话号码的字母组合
算法·深度优先·回溯
YL200404262 小时前
038翻转二叉树
数据结构·leetcode