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;
    }
};
相关推荐
码流之上27 分钟前
【一看就会一写就废 指间算法】设计电子表格 —— 哈希表、字符串处理
javascript·算法
快手技术2 小时前
快手提出端到端生成式搜索框架 OneSearch,让搜索“一步到位”!
算法
感哥3 小时前
C++ 多重继承
c++
博笙困了3 小时前
C++提高编程 4.0
c++
扑克中的黑桃A3 小时前
[C语言]第三章-数据类型&变量
c++
感哥4 小时前
C++ std::string
c++
感哥20 小时前
C++ 面向对象
c++
CoovallyAIHub1 天前
中科大DSAI Lab团队多篇论文入选ICCV 2025,推动三维视觉与泛化感知技术突破
深度学习·算法·计算机视觉
沐怡旸1 天前
【底层机制】std::shared_ptr解决的痛点?是什么?如何实现?如何正确用?
c++·面试
NAGNIP1 天前
Serverless 架构下的大模型框架落地实践
算法·架构