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;
    }
};
相关推荐
小雨下雨的雨3 小时前
井字棋AI机器人实现详解 - Minimax算法实战-鸿蒙PC Electron框架完成
前端·人工智能·算法·华为·electron·鸿蒙
xieliyu.6 小时前
Java算法精讲:双指针(三)
java·开发语言·算法
一条小锦吕*6 小时前
基于Spring Boot + 数据可视化 + 协同过滤算法的推荐系统设计与实现(源码+论文+部署全讲解)
spring boot·算法·信息可视化
如竟没有火炬8 小时前
最大矩阵——单调栈
数据结构·python·线性代数·算法·leetcode·矩阵
8Qi88 小时前
LeetCode 1143 & 718:最长公共子序列 / 最长重复子数组
算法·leetcode·职场和发展·动态规划
绿算技术9 小时前
万卡推理集群存储选型分析:从核心架构到应用视角
大数据·科技·算法·架构
Qt程序员9 小时前
Linux RCU 原理与应用
linux·c++·内核·linux内核·rcu
想吃火锅100510 小时前
【leetcode】1.两数之和js版
javascript·算法·leetcode
qeen8710 小时前
【C++】类与对象之类的默认成员函数(二)
android·c语言·开发语言·c++·笔记·学习