leetcode 105 前序中序构建二叉树

  1. 首先要明确一点,这个题是不能有重复元素的,否则就没办法做,这个易于证明
  2. 这个题目用递归即可,迭代炫技必要性不强

基本思想:我们从二叉树的前序第一个元素开始,即根节点,找到中序数组中,该节点的位置,即可划分左子树和右子树,然后在移动到第二个节点,即可递归的处理所有情况。

注意:

1.前序和中序的lll和rrr要分开处理,不然会逐渐错位

2.处理len时,要注意边界,比较容易错。。

cpp 复制代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
typedef vector<int> V;

class Solution {
public:
    TreeNode* dfs(V& preorder, V& inorder, int pl, int pr, int il, int ir, unordered_map<int, int>& m)
    {
        // printf("%d %d\n", l, r);
        if(pl > pr)return nullptr;
        int val = preorder[pl];
        TreeNode *n = new TreeNode(val);
        if(pl == pr)return n;
        int mid_pos = m[val];
        int len = mid_pos - il;
        n->left = dfs(preorder, inorder, pl+1, pl+len, il, mid_pos-1, m);
        n->right = dfs(preorder, inorder, pl+len+1, pr, mid_pos+1, ir, m);
        return n;
    }

    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        unordered_map<int, int> m;
        int n = preorder.size();
        for(int i=0;i<n;i++)
        {
            m[inorder[i]] = i;
        }

        return dfs(preorder, inorder, 0, n-1, 0, n-1, m);
    }
};
相关推荐
小卡不对头12 小时前
系统集成项目管理工程师好考吗?零基础小白怎么考,软考题库怎么选?
职场和发展
测试老哥12 小时前
软件测试:单元测试详解
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
星轨初途13 小时前
LeetCode 热题 100——day7 接雨水
数据结构·c++·笔记·算法·leetcode·职场和发展
qeen8713 小时前
【数据结构】搜索二叉树的介绍与算法原理解析及实现
数据结构·c++·学习·算法·模板
阳明山水13 小时前
销量预测的“隐形杀手”:概念漂移与自适应学习实战
人工智能·深度学习·算法·机器学习·架构
szarron13 小时前
HT666 0.6-6GHz 定向高增益手持天线:EMC 测试与频谱定位实战指南
网络·算法·5g·信号处理·射频工程·频谱仪
城管不管13 小时前
2026.8.6成都分部一面当场OC
面试·职场和发展
liulilittle13 小时前
反量化:反量化Q8零(q8_0)
人工智能·算法·机器学习·ai·llm
青 春 记 忆19 小时前
LeetCode 21. 合并两个有序链表|Python 解法详解
python·算法·leetcode·链表
Sagittarius_A*1 天前
后量子密码|通识认知 03|量子威胁辟谣:Grover 算法对对称密码的影响与误区
算法·信息安全·密码学·量子计算·pqc·后量子密码