代码随想录算法刷题训练营day19

代码随想录算法刷题训练营day19:LeetCode(404)左叶子之和、LeetCode(112)路径总和、LeetCode(113)路径总和 II、LeetCode(105)从前序与中序遍历序列构造二叉树、LeetCode(106)从中序与后序遍历序列构造二叉树

LeetCode(404)左叶子之和
题目
在这里插入图片描述

代码

/*** 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 int sumOfLeftLeaves(TreeNode root) {//int sum=0;//递归条件变化一下if(root==null){return 0;}if(root.left==null&&root.right==null){return 0;}//int sum=0;int result=sumOfLeftLeavesTest(root);return result;}public int sumOfLeftLeavesTest(TreeNode root){if(root==null){return 0;}if(root.left==null&&root.right==null){return 0;}int leftSum=sumOfLeftLeavesTest(root.left);//此时是左子树,同样也是叶子节点int rightSum=sumOfLeftLeavesTest(root.right);int leftValue=0;if(root.left!=null&&root.left.left==null&&root.left.right==null){//空指针异常问题leftValue=root.left.val;}int sum=leftSum+rightSum+leftValue;return sum;}
}

LeetCode(112)路径总和
题目
在这里插入图片描述

代码

import java.util.ArrayList;
import java.util.List;/*** 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 boolean hasPathSum(TreeNode root, int targetSum) {//采用前序遍历,把二叉树的所有路径取出来,放到集合通过遍历集合读出路径和List<List> pathDate=new ArrayList<>();List<Integer> paths=new ArrayList<>();//定义一个获取路径的函数getPaths(root,pathDate,paths);for(int i=0;i<pathDate.size();i++){List<Integer> path=pathDate.get(i);int sum=0;for(int j=0;j<path.size();j++){sum=sum+path.get(j);}if(sum==targetSum){return true;}}return false;}public void getPaths(TreeNode root,List<List> pathDate,List<Integer> paths){//设置终止条件if(root==null){return;}//前序遍历----到根节点进行判断---不然如果仅有一个节点,加入不了根结点数据paths.add(root.val);//判断到叶子节点的时候,将存储的路径数据放到集合里面if(root.left==null&&root.right==null){//将路径存储到pathDate中List<Integer> date = new ArrayList<>();date.addAll(paths);//拷贝数据----引用型数据不能直接赋值pathDate.add(date);}//遍历左子树if(root.left!=null){getPaths(root.left, pathDate, paths);//回溯paths.remove(paths.size()-1);}//遍历右子树if(root.right!=null){getPaths(root.right, pathDate, paths);//回溯paths.remove(paths.size()-1);}}
}

LeetCode(113)路径总和 II
题目
在这里插入图片描述

代码

import java.util.ArrayList;
import java.util.List;/*** 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 List<List<Integer>> pathSum(TreeNode root, int targetSum) {List<List> datePath=new ArrayList<>();//存放所有路径数据List<Integer> paths=new ArrayList<>();//存放遍历路径数据List<List<Integer>> resultPath=new ArrayList<>();//存放结果路径数据getTreePath(root,datePath,paths);for(int i=0;i<datePath.size();i++){List<Integer> path=new ArrayList<>();path=datePath.get(i);int sum=0;for(int j=0;j<path.size();j++){sum=sum+path.get(j);}if(sum==targetSum){resultPath.add(path);}}return resultPath;}//定义获取树路径的函数public void getTreePath(TreeNode root,List<List> datePath,List<Integer> paths){if(root==null){return;//终止条件1---防止空节点异常}//收尾路径----先通过先序遍历paths.add(root.val);//遍历根节点,保证有数据if(root.left==null&&root.right==null){List<Integer> data=new ArrayList<>();data.addAll(paths);datePath.add(data);}//遍历左子树if(root.left!=null){getTreePath(root.left, datePath, paths);//回溯paths.remove(paths.size()-1);}//遍历右子树if(root.right!=null){getTreePath(root.right, datePath, paths);//回溯paths.remove(paths.size()-1);}}
}

LeetCode(105)从前序与中序遍历序列构造二叉树
题目
在这里插入图片描述

代码

import java.util.Arrays;/*** 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) {//切割+递归//终止条件if(preorder.length==0){return null;}//取根节点int rootdate=preorder[0];TreeNode root=new TreeNode(rootdate);int index=0;//找出中序遍历数组的中间节点for (int i = 0; i < inorder.length; i++) {if(rootdate==inorder[i]){index=i;}    }//切割中序int[] leftInorder=Arrays.copyOfRange(inorder, 0, index);int[] rightInorder=Arrays.copyOfRange(inorder, index+1, inorder.length);//切割后续int dateLength=leftInorder.length;int[] leftPreorder=Arrays.copyOfRange(preorder, 1, 1+dateLength);int[] rightPreorder=Arrays.copyOfRange(preorder, 1+dateLength, preorder.length);//继续递归root.left=buildTree(leftPreorder, leftInorder);root.right=buildTree(rightPreorder, rightInorder);return root;}
}

LeetCode(106)从中序与后序遍历序列构造二叉树
题目
在这里插入图片描述

代码

import java.util.Arrays;/*** 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[] inorder, int[] postorder) {//方法:进行切割中序和后序//判断树是否为空树if(inorder.length==0){return null;//终止条件}//后序遍历数组的最后一个数字是根节点//把根节点高处来,便于切割中序数组和中序数组//递归终止条件int index=0;TreeNode root=new TreeNode();int indexRoot=postorder[postorder.length-1];/* if(postorder.length>0){//设置root.val=indexRoot;//切割中序数组      } */root.val=indexRoot;for (int i = 0; i < inorder.length; i++) {if(indexRoot==inorder[i]){index=i;break;}  }  //获取中间索引位置//获取中序遍历中左子树的中序遍历int[] leftInorder=Arrays.copyOfRange(inorder, 0, index);int[] rightInorder=Arrays.copyOfRange(inorder, index+1, inorder.length);//切割后序遍历数组int leftLength=leftInorder.length;int[] leftPostorder=Arrays.copyOfRange(postorder, 0, leftLength);int[] rightPostorder=Arrays.copyOfRange(postorder, leftLength, postorder.length-1);//根据下标截取数组//递归开始,将左子树,仍进去root.left=buildTree(leftInorder, leftPostorder);root.right=buildTree(rightInorder, rightPostorder);return root;}
}

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

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

相关文章

JMeter GUI:测试计划和工作台

什么是测试计划&#xff1f; 测试计划是您添加 JMeter 测试所需元素的地方。 它存储运行所需测试所需的所有元素&#xff08;如线程组、计时器等&#xff09;及其相应的设置。 下图显示了测试计划的示例 测试计划是您添加 JMeter 测试所需元素的地方。 它存储运行所需测试…

自然语言nlp学习 三

4-8 Prompt-Learning--应用_哔哩哔哩_bilibili Prompt Learning&#xff08;提示学习&#xff09;是近年来在自然语言处理领域中&#xff0c;特别是在预训练-微调范式下的一个热门研究方向。它主要与大规模预训练模型如GPT系列、BERT等的应用密切相关。 在传统的微调过程中&a…

fgets函数和fputs函数的使用

----由于本人使用的是大白话来讲解fgets和fputs函数的使用&#xff0c;所以可能有些部分可能会有些不准确&#xff08;见谅&#xff09;&#xff0c;如果想十分严谨的了解fgets和fputs函数&#xff0c;可以移步其他文章。 -----那么不废话&#xff0c;直接开始 1.fgets函数 &a…

05. 交换机的基本配置

文章目录 一. 初识交换机1.1. 交换机的概述1.2. Ethernet_ll格式1.3. MAC分类1.4. 冲突域1.5. 广播域1.6. 交换机的原理1.7. 交换机的3种转发行为 二. 初识ARP2.1. ARP概述2.2. ARP报文格式2.3. ARP的分类2.4. 免费ARP的作用 三. 实验专题3.1. 实验1&#xff1a;交换机的基本原…

海外云手机为什么吸引用户?

近年来&#xff0c;随着全球化的飞速发展&#xff0c;海外云手机逐渐成为各行各业关注的焦点。那么&#xff0c;究竟是什么让海外云手机如此吸引用户呢&#xff1f;本文将深入探讨海外云手机的三大吸引力&#xff0c;揭示海外云手机的优势所在。 1. 高效的社交媒体运营 海外云…

IDEA安装MyBatisX插件

IDEA工具在开发人员中经常使用&#xff0c;从dao层到xml文件对应的查看很费劲&#xff0c;这时候就有相应的插件工具出现了MyBatisX。他的好处如下&#xff1a; mapper and xml can jump back and forth mybatis.xml,mapper.xml prompt mapper and xml support auto prompt lik…

MATLAB知识点:创建MATLAB的脚本

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 节选自第2章 在实际应用中&#xff0c;直接在命令行窗口中输…

PaddleNLP的简单使用

1 介绍 PaddleNLP是一个基于PaddlePaddle深度学习平台的自然语言处理&#xff08;NLP&#xff09;工具库。 它提供了一系列用于文本处理、文本分类、情感分析、文本生成等任务的预训练模型、模型组件和工具函数。 PaddleNLP有统一的应用范式&#xff1a;通过 paddlenlp.Task…

JavaWeb后端登录校验功能(JWT令牌技术,Cookie技术,Session,拦截技术,过滤器)

目录 一.登录校验功能&#xff08;解决直接通过路径访问&#xff09; 1.实现思路 二.会话技术 ​编辑 1.Cookie技术 2.Session 3.令牌技术 1.简介 2.如何生成和解析 3.令牌的使用 三.Filter过滤器 1.什么是过滤器 2.实现步骤&#xff1a; 3.过滤器执行流程 4.拦截路径 5.过…

Microsoft Edge 浏览器报错 提示不安全

网站提示不安全 是因为 Microsoft Edge 开了安全过滤 我们需要把这个关掉 打开浏览器的设置&#xff0c;然后 找到隐私选项 找到下边的Microsoft Defender Smartscreen 关掉 Microsoft Edge 支持 Microsoft Defender SmartScreen | Microsoft Learn win10系统下打开网页提示…

[ESXi 8]安装centos7

文章目录 创建虚拟机创建虚拟机选择centos7选择存储选择镜像文件上传ios镜像文件 安装即将完成 启动虚拟机自动获取ip设置root密码安装成功 创建虚拟机 创建虚拟机 选择centos7 选择存储 选择镜像文件 上传ios镜像文件 如图显示上传进度&#xff0c;上传完毕之后&#xff0c;将…

绝地求生:2024PUBG电竞全球合作俱乐部公告

亲爱的闲游盒PUBG电竞爱好者&#xff0c; 你们好&#xff01; 我们非常高兴地向您宣布 2024 年PUBG电竞全球合作俱乐部计划成员名单。八支战队的保留和两支新战队的加入有很多内容需要介绍&#xff0c;让我们马上进入正题。 保留的全球合作俱乐部 17Gaming FaZe CLAN Four A…