力扣labuladong——一刷day51

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、力扣106. 从中序与后序遍历序列构造二叉树
  • 二、力扣889. 根据前序和后序遍历构造二叉树
  • 三、力扣331. 验证二叉树的前序序列化
  • 四、力扣426. 将二叉搜索树转化为排序的双向链表


前言


二叉树的递归分为「遍历」和「分解问题」两种思维模式,这道题需要用到「分解问题」的思维。

一、力扣106. 从中序与后序遍历序列构造二叉树

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {Map<Integer,Integer> map = new HashMap<>();public TreeNode buildTree(int[] inorder, int[] postorder) {for(int i = 0; i < inorder.length; i ++){map.put(inorder[i],i);}return fun(inorder,postorder,0,inorder.length-1,0,postorder.length-1);}public TreeNode fun(int[] inorder, int[] postorder, int inLow, int inHigh,int postLow,int  postHigh){if(inLow > inHigh){return null;}int index = map.get(postorder[postHigh]);TreeNode cur = new TreeNode(postorder[postHigh]);int len = index - inLow;cur.left = fun(inorder,postorder,inLow,index-1,postLow,postLow+len-1);cur.right = fun(inorder,postorder,index+1,inHigh,postLow+len,postHigh-1);return cur;}
}

二、力扣889. 根据前序和后序遍历构造二叉树

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {Map<Integer,Integer> map = new HashMap<>();public TreeNode constructFromPrePost(int[] preorder, int[] postorder) {for(int i = 0; i < postorder.length; i ++){map.put(postorder[i],i);}return fun(preorder,postorder,0,preorder.length-1,0,postorder.length-1);}public TreeNode fun(int[] preorder,int[] postorder,int preLow, int preHigh,int postLow,int postHigh){if(preLow > preHigh){return null;}TreeNode cur = new TreeNode(preorder[preLow]);if(preLow + 1 <= preHigh){int index = map.get(preorder[preLow+1]);int len = index - postLow +1;cur.left = fun(preorder,postorder,preLow+1,preLow+len,postLow,index);cur.right = fun(preorder,postorder,preLow+len+1,preHigh,index+1,postHigh-1);}return cur;}
}

三、力扣331. 验证二叉树的前序序列化

class Solution {public boolean isValidSerialization(String preorder) {int edge = 1;for(String s : preorder.split(",")){if(s.equals("#")){edge -= 1;if(edge < 0){return false;}}else{edge -= 1;if(edge < 0){return false;}edge += 2;}}return edge == 0;}
}

四、力扣426. 将二叉搜索树转化为排序的双向链表

/*
// Definition for a Node.
class Node {public int val;public Node left;public Node right;public Node() {}public Node(int _val) {val = _val;}public Node(int _val,Node _left,Node _right) {val = _val;left = _left;right = _right;}
};
*/class Solution {Node pre = null, first = null;boolean flag = true;public Node treeToDoublyList(Node root) {if(root == null){return null;}fun(root);first.left = pre;pre.right = first;return first;}public void fun(Node root){if(root == null){return ;}fun(root.left);if(pre != null){pre.right = root;root.left = pre;}pre = root;if(flag){first = root;flag = false;}fun(root.right);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/168969.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

检索增强生成架构详解【RAG】

生成式AI技术很强大&#xff0c;但它们受到知识的限制。 虽然像 ChatGPT 这样的LLM可以执行许多任务&#xff0c;但每个LLM的基线知识都存在基于其训练数据的差距。 如果你要求LLM写一些关于最近趋势或事件的文章&#xff0c;LLM不会知道你在说什么&#xff0c;而且回答最好是混…

单文件组件MVVM

单文件组件&MVVM 所谓组件化开发&#xff0c;就是创建一个个组件。 Vue是一个大类&#xff0c;渲染一切从new Vue开始。 指定视图&#xff1a;el template render:jsx语法 $mount[数学公式] 编译App.vue&#xff0c;作为视图入口 单个组件&#xff1a;结构 样式 data compu…

php高级工程师范文模板

以下简历内容以php高级工程师招聘需求为背景&#xff0c;我们制作了1份全面、专业且具有参考价值的简历案例&#xff0c;大家可以灵活借鉴&#xff0c;希望能帮助大家在众多候选人中脱颖而出。 php高级工程师简历在线制作下载&#xff1a;百度幻主简历 求职意向 求职类型&…

个人财务管理软件CheckBook Pro mac中文版特点介绍

CheckBook Pro mac是一款Mac平台的个人财务管理软件&#xff0c;主要用于跟踪个人收入、支出和账户余额等信息。 CheckBook Pro mac 软件特点 简单易用&#xff1a;该软件的用户界面非常简洁明了&#xff0c;即使您是初学者也可以轻松上手。 多账户管理&#xff1a;该软件支持…

webrtc AEC 线性滤波 PBFDAF(均匀分块频域自适应滤波)介绍

计算一个脉冲响应和输入信号的卷积&#xff0c;除了使用原始的时域卷积以外&#xff0c;还有如下方法&#xff1a; FFT卷积的方法&#xff1a;对输入信号&#xff08;长度M&#xff09;和脉冲响应&#xff08;长度N&#xff09;分别补零到K&#xff08;K>MN-1)&#xff0c;…

【UGUI】实现跑酷游戏分数血量显示在UI中

//1.实现让玩家的金币分数显示在UI文本中 2.让血量和滑动条关联起来 这一节课主要学会获取组件并改变属性&#xff0c;举一反三&#xff01; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TMPro;//1.实现让玩…

Python与设计模式--组合模式

9-Python与设计模式–组合模式 一、公司结构组织 每一个公司都有自己的组织结构&#xff0c;越是大型的企业&#xff0c;其组织结构就会越复杂。大多数情况下&#xff0c;公司喜欢用“树形” 结构来组织复杂的公司人事关系和公司间的结构关系。一般情况下&#xff0c;根结点代…

ES6之class类

ES6提供了更接近传统语言的写法&#xff0c;引入了Class类这个概念&#xff0c;作为对象的模板。通过Class关键字&#xff0c;可以定义类&#xff0c;基本上&#xff0c;ES6的class可以看作只是一个语法糖&#xff0c;它的绝大部分功能&#xff0c;ES5都可以做到&#xff0c;新…

电子学会C/C++编程等级考试2021年06月(二级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:数字放大 给定一个整数序列以及放大倍数x,将序列中每个整数放大x倍后输出。 时间限制:1000 内存限制:65536输入 包含三行: 第一行为N,表示整数序列的长度(N ≤ 100); 第二行为N个整数(不超过整型范围),整数之间以一个空格…

Leetcode—1457.二叉树中的伪回文路径【中等】

2023每日刷题&#xff08;四十&#xff09; Leetcode—1457.二叉树中的伪回文路径 实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ int record[10] {0};int accumula…

在mathtype输入花体,如L,I, K等

在mathtype输入“\mathcal{L}"就OK了 \mathcal{K} \mathcal{I}

idea git将某个分支内的commit合并到其他分支

idea git将某个分支内的commit合并到其他分支 1.打开旧分支的代码提交记录 在IDEA中切换到新分支的代码&#xff0c;点击Git打开代码管理面板&#xff0c;在顶部点击Log:标签页&#xff08;这个标签页内将来可以选择不同分支的个人/所有人的代码commit记录&#xff09;&#x…

2311小技巧,下载微软经典mspaint画图等

地址在此 这里,可以下载经典游戏,经典画图,还有经典便签.可以去试试.

2023年亚太杯数学建模A题解题思路(*基于OpenCV的复杂背景下苹果目标的识别定位方法研究)

摘要 由于要求较高的时效性和劳力投入&#xff0c;果实采摘环节成为苹果生产作业中十分重要的一部分。而对于自然环境下生长的苹果&#xff0c;光照影响、枝叶遮挡和果实重叠等情况普遍存在&#xff0c;这严重影响了果实的准确识别以及采摘点的精确定位。针对在复杂背景下苹果的…

Debezium系列之:详细介绍实现时间字段时区转换的方式

Debezium系列之:详细介绍实现时间字段时区转换的方式 一、背景二、深入理解Debezium对时间字段值的处理三、创建时间字段表四、插入语句五、设置数据库时区为UTC时区六、utc时区数据库时间字段转化为东八区设置七、参数详解八、查看数据九、多张表多个时间字段设置方式十、设置…

如何在GO中写出准确的基准测试

一般来说&#xff0c;我们不应该对性能进行猜测。在编写优化时&#xff0c;会有许多因素可能起作用&#xff0c;即使我们对结果有很强的看法&#xff0c;测试它们很少是一个坏主意。然而&#xff0c;编写基准测试并不简单。很容易编写不准确的基准测试&#xff0c;并且基于这些…

系列九、声明式事务(xml方式)

一、概述 声明式事务(declarative transaction management)是Spring提供的对程序事务管理的一种方式&#xff0c;Spring的声明式事务顾名思义就是采用声明的方式来处理事务。这里所说的声明&#xff0c;是指在配置文件中声明&#xff0c;用在Spring配置文件中声明式的处理事务来…

springboot3.0项目框架搭建

一、springboot3项目创建 在idea中创建springboot3项目后,主要的pom文件如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema…

MySql数据库常用指令(三)MySQL 索引1

MySql数据库常用指令&#xff08;三&#xff09; 一、创建索引二、修改表结构(添加索引)三、创建表的时候直接指定四、删除索引的语法五、唯一索引 MySQL 索引是一种数据结构&#xff0c;用于加快数据库查询的速度和性能。 MySQL 索引的建立对于 MySQL 的高效运行是很重要的&a…

roseha for windows 11+oracle 11g部署过程

文章目录 一、环境准备关闭防火墙配置hosts共享存储准备 二、部署步骤1.主机A、B安装数据库软件2.主机A进行数据库实例创建3.主机B创建数据库4.安装配置roseha软件 一、环境准备 windows server 2019 oracle 11.2.0.3 EE roseha for windows 11 5个IP地址&#xff1a;2心跳、3…