当前位置: 首页 > article >正文

【力扣】105.从前序与中序遍历序列构造二叉树

AC截图

题目

思路

通过前序遍历和中序遍历,可以确定根结点、左子树和右子树。如果我们确定左子树和右子树的范围,就可以递归构建二叉树。

代码

/**
 * 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) {}
 * };
 */
class Solution {
public:
    unordered_map<int,int> map;
    TreeNode* build(vector<int>& preorder,vector<int>& inorder,int preLeft,int preRight,int inLeft,int inRight){
        if(preLeft>preRight){
            return NULL;
        }
        
        int inRoot = map[preorder[preLeft]];
        TreeNode* root = new TreeNode(preorder[preLeft]);
        int leftSize = inRoot-inLeft;
        root->left = build(preorder,inorder,preLeft+1,preLeft+leftSize,inLeft,inRoot-1);
        root->right = build(preorder,inorder,preLeft+leftSize+1,preRight,inRoot+1,inRight);
        return root;
    }
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        for(int i=0;i<inorder.size();i++){
            map[inorder[i]]=i;
        }
        return build(preorder,inorder,0,preorder.size()-1,0,inorder.size()-1);
    }
};


http://www.kler.cn/a/550957.html

相关文章:

  • 多层代理模式解析Invocation
  • ubuntu20.04安装nccl2.16.5
  • 单例模式、构造函数、左值右值
  • 【Rust中级教程】1.12. 生命周期(进阶) Pt.2:生命周期变型、协变、不变、逆变
  • ASCII 与 Unicode:两种字符编码的定义和不同
  • Python基于Flask的豆瓣电影数据分析可视化系统(附源码,文档说明)
  • HUP-3D:用于辅助自我中心手持超声探头姿态估计的3D多视角合成数据集
  • 遗传算法与深度学习实战(35)——使用遗传算法优化生成对抗网络
  • 【Golang 面试题】每日 3 题(五十四)
  • Lombok未生效解决办法
  • 云轴科技ZStack+神州鲲泰,全面支持企业私有化部署DeepSeek模型
  • 2.17寒假作业
  • Python 基础-循环
  • Go 语言编译的原理
  • Python elasticsearch客户端连接常见问题整理
  • PHP 数组与数据结构详解
  • SQL高级技巧之埋点解析
  • Linux之kernel(1)系统基础理论(3)
  • GPT-4与内容生成:从写作到编程的跨越
  • Rust学习总结之所有权(三)