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

leetcode日记(93)从中序与后序遍历序列构造二叉树

和上一题类似,要从后往前遍历后序遍历,并且先右后左。

/**
 * 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:
    vector<int> postorder;
    unordered_map<int,int> index;
    int n;
    TreeNode* dg(int min,int max){
        if(min>max||n<0) return nullptr;
        TreeNode* tree=new TreeNode(postorder[n]);
        if(max==min) return tree;
        int i=index[postorder[n]];
        if(max!=i){
            n--;
            tree->right=dg(i+1,max);
        }
        if(min!=i){
            n--;
            tree->left=dg(min,i-1);
        }
        return tree;
    }
    TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
        this->postorder=postorder;
        for(int i=0;i<inorder.size();i++){
            index[inorder[i]]=i;
        }
        n=postorder.size()-1;
        return dg(0,postorder.size()-1);
    }
};


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

相关文章:

  • C 语言数据结构(三):栈和队列
  • 【3D视觉学习笔记1】针孔相机模型与坐标系变换
  • Linux进程管理15 - CFS调度器2 - 数据结构关系
  • c#25/3/11 周二
  • WHAT - 前端性能监控和错误追踪(Sentry 篇)
  • 【A2DP】蓝牙A2DP协议剖析:从架构到规范
  • 2025-03-11 学习记录--C/C++-PTA 习题11-5 指定位置输出字符串
  • 详细介绍c++中的文件处理
  • nginx 代理 redis
  • git子仓库管理的两种方式
  • 从零开发Chrome广告拦截插件:开发、打包到发布全攻略
  • C++ 标准库:string 类、vector/List 容器与文件操作深度剖析
  • Android JNI二维码生成与优化方案
  • C语言_数据结构总结3:带头结点的单链表
  • deepseek R1提供的3d迷宫设计方案
  • 爬虫中一些有用的用法
  • PHP框架加载不上.env文件中的变量
  • Mysql 的 Query Cache为什么被废弃
  • Linux losetup循环设备
  • 阿里云ECS防勒索数据安全新选择:安当RDM防勒索组件——低成本、高可靠的主动防御方案