力扣-Hot100-二叉树其二【算法学习day.33】

embedded/2024/11/18 1:26:35/

前言

###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!


习题

1.从前序和中序遍历序列构造二叉树

题目链接:105. 从前序与中序遍历序列构造二叉树 - 力扣(LeetCode)

题面:

基本分析:前序遍历数组中第一个是头结点,头结点在中序遍历数组中的位置为1,1之前的节点都属于头结点的左子树节点,1之后的节点都属于头结点的右子树节点,根据此规律递归下去

代码:

java">/*** 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 {public TreeNode buildTree(int[] preorder, int[] inorder) {TreeNode root =  recursion(preorder,0,preorder.length-1,inorder,0,inorder.length-1);return root;}public TreeNode recursion(int[] preorder,int prestart,int preend, int[] inorder,int instart,int inend){if(prestart>preend)return null;int rootval = preorder[prestart];TreeNode root = new TreeNode(rootval);int index = 0;for(int i = instart;i<=inend;i++){if(inorder[i]==rootval){index = i;break;}}int leftnum = index - instart;root.left = recursion(preorder,prestart+1,prestart+leftnum,inorder,instart,instart+leftnum-1);root.right = recursion(preorder,prestart+leftnum+1,preend,inorder,instart+leftnum+1,inend);return root;}
}

2. 路径总和III

题目链接:437. 路径总和 III - 力扣(LeetCode)

题面:

基本分析:利用dfs暴力,力扣题解中也有大佬使用前缀和,推荐看一下

代码:

java">/*** 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 {int ans = 0;int targetSum;public int pathSum(TreeNode root, int targetSum) {if(root==null)return 0;this.targetSum=targetSum;recursion(root);return ans;}public void recursion(TreeNode root){if(root==null){return;}recursion2(root,root.val);recursion(root.left);recursion(root.right);}public void recursion2(TreeNode root,long val){if(val==targetSum)ans++;if(root.left!=null)recursion2(root.left,val+root.left.val);if(root.right!=null)recursion2(root.right,val+root.right.val);}
}

3.二叉树中的最大路径和

题目链接:124. 二叉树中的最大路径和 - 力扣(LeetCode)

题面:

基本分析:dp

代码:

java">/*** 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 {private int ans = Integer.MIN_VALUE;public int maxPathSum(TreeNode root) {dfs(root);return ans;}private int dfs(TreeNode node) {if (node == null) {return 0; // 没有节点,和为 0}int lVal = dfs(node.left); // 左子树最大链和int rVal = dfs(node.right); // 右子树最大链和ans = Math.max(ans, lVal + rVal + node.val); // 两条链拼成路径return Math.max(Math.max(lVal, rVal) + node.val, 0); // 当前子树最大链和(注意这里和 0 取最大值了)}
}

后言

上面是力扣Hot100的二叉树专题,下一篇是该专题的其他题目,希望有所帮助,一同进步,共勉!


http://www.ppmy.cn/embedded/138056.html

相关文章

想要监控办公电脑,好用的监控软件怎么选择

在现代办公环境中&#xff0c;监控办公电脑不仅能帮助企业确保员工的工作效率&#xff0c;还能够提高数据安全性&#xff0c;防止信息泄露。随着技术的不断发展&#xff0c;市面上涌现了各种监控软件&#xff0c;其中不乏功能强大、使用便捷的工具。今天&#xff0c;我们就来探…

代码随想录算法训练营第三十一天| 56. 合并区间 、738.单调递增的数字 。c++转java

56. 合并区间 class Solution {public int[][] merge(int[][] intervals) {//对区间按照右边界排序Arrays.sort(intervals,(a,b) -> Integer.compare(a[0],b[0]));List<int[]> p new LinkedList<>();int l intervals[0][0],r intervals[0][1];for(int i 1;i…

词汇积累之插科打诨、道貌岸然、前仰后合极简理解

插科打诨 1、基本介绍 指戏曲演出中穿插一些滑稽的动作与谈话&#xff0c;引人发笑 其中&#xff0c;“科”指古典戏曲中的表情与动作&#xff0c;“诨”指诙谐逗趣的话 也泛指表演滑稽、开玩笑的行为 2、示例 他总喜欢在朋友聚会时【插科打诨】&#xff0c;讲些笑话&…

嵌入式学习-C嘎嘎-Day03

嵌入式学习-C嘎嘎-Day03 1. 友元 friend 1.1 概念 1.2 友元函数 1.3 友元类 1.4 友元成员函数 2. 运算符重载 2.1 概念 2.2 友元函数运算符重载 2.3 成员函数运算符重载 2.4 特殊运算符重载 2.4.1 赋值运算符重载 2.4.2 类型转换运算符重载 2.5 注意事项 3. 字符串类型 string …

Nginx Spring boot指定域名跨域设置

1、Nginx配置跨域&#xff1a; server {listen 80;server_name your-backend-service.com;location / {proxy_pass http://localhost:8080; # Spring Boot应用的内部地址proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-F…

从前端react动画引发到计算机底层的思考

一、react 项目 中 数字从0增加到30000&#xff0c;变化动画效果 在 React 中实现数字从 0 增加到 30000 的动画效果&#xff0c;常见的方法是使用 requestAnimationFrame 或者使用 setInterval 来实现递增动画。结合 React 的 state 来更新数字的值&#xff0c;然后在组件中渲…

Kafka节点服役和退役

1 服役新节点 1&#xff09;新节点准备 &#xff08;1&#xff09;关闭 bigdata03&#xff0c;进行一个快照&#xff0c;并右键执行克隆操作。 &#xff08;2&#xff09;开启 bigdata04&#xff0c;并修改 IP 地址。 vi /etc/sysconfig/network-scripts/ifcfg-ens33修改完…

一文讲清楚人工智能自然语言处理中的数据预处理(数据清洗)

一、定义 在自然语言处理&#xff08;NLP&#xff09;中&#xff0c;数据预处理&#xff0c;又可称数据清洗&#xff0c;是指将原始文本数据转换成适合机器学习模型处理的格式的过程。 二、实例讲解 上面的定义阐述有些僵硬吧&#xff0c;笔者思考了好久&#xff0c;给出下面这…