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

news2024/12/26 17:45:40

代码随想录算法刷题训练营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.coloradmin.cn/o/1418959.html

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

相关文章

GitHub 上传文件夹到远程仓库、再次上传修改文件、如何使用lfs上传大文件、github报错一些问题

按照大家的做法&#xff0c;把自己遇到的问题及解决方案写出来&#xff08;注意&#xff1a;Error里面有些方法有时候我用可以成功&#xff0c;有时候我用也不能成功&#xff0c;写出来仅供参考&#xff0c;实在不行重头再clone&#xff0c;add&#xff0c;commit&#xff0c;p…

Virtual Assistant for Smartphone;Denoising Autoencoder;CrossMAE

本文首发于公众号&#xff1a;机器感知 Virtual Assistant for Smartphone&#xff1b;Denoising Autoencoder&#xff1b;CrossMAE The Case for Co-Designing Model Architectures with Hardware While GPUs are responsible for training the vast majority of state-of-t…

dvwa,xss反射型lowmedium

xss&#xff0c;反射型&#xff0c;low&&medium low发现xss本地搭建实操 medium作为初学者的我第一次接触比较浅的绕过思路 low 发现xss 本关无过滤 <script>alert(/xss/)</script> //或 <script>confirm(/xss/)</script> //或 <script&…

vulnhub靶场之EMPIRE:BREAKOUT

一.环境搭建 1.靶场描述 Description Back to the Top Difficulty: Easy This box was created to be an Easy box, but it can be Medium if you get lost. For hints discord Server ( https://discord.gg/7asvAhCEhe ) 2.靶场地址 https://www.vulnhub.com/entry/empire-…

Canny边缘检测算法(python 实现)

1. 应用高斯滤波来平滑(模糊)图像&#xff0c;目的是去除噪声 2. 计算梯度强度和方向&#xff0c;寻找边缘&#xff0c;即灰度强度变化最强的位置 3应用非最大抑制技术NMS来消除边误检模糊&#xff08;blurred&#xff09;的边界变得清晰&#xff08;sharp&#xff09;。保留了…

力扣题目训练(3)

2024年1月27日力扣题目训练 2024年1月27日力扣题目训练290. 单词规律292. Nim 游戏303. 区域和检索 - 数组不可变91. 解码方法92. 反转链表 II41. 缺失的第一个正数 2024年1月27日力扣题目训练 2024年1月27日第三天编程训练&#xff0c;今天主要是进行一些题训练&#xff0c;包…

机器学习算法实战案例:使用 Transformer 模型进行时间序列预测实战(升级版)

时间序列预测是一个经久不衰的主题&#xff0c;受自然语言处理领域的成功启发&#xff0c;transformer模型也在时间序列预测有了很大的发展。 本文可以作为学习使用Transformer 模型的时间序列预测的一个起点。 文章目录 机器学习算法实战案例系列答疑&技术交流数据集数据…

Java RC4加密算法

一、RC4加密算法 在密码学中&#xff0c;RC4&#xff08;来自Rivest Cipher 4的缩写&#xff09;是一种流加密算法&#xff0c;密钥长度可变。它加解密使用相同的密钥&#xff0c;因此也属于对称加密算法。 百度百科 - RC4&#xff1a;https://baike.baidu.com/item/RC4/34545…

揭秘1688商品详情API接口:一探阿里巴巴的亿级商品数据宝藏

一、概述 1688商品详情API接口是阿里巴巴提供的一套应用程序接口&#xff0c;允许第三方开发者获取1688平台上的商品详情信息。通过使用这个接口&#xff0c;开发者可以获取到商品的详细属性、规格参数、价格等信息&#xff0c;从而进行深度分析和挖掘&#xff0c;进一步优化和…

selenium元素定位---元素点击交互异常解决方法

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;薪资嘎嘎涨 1、异常原因 在编写ui自动化时&#xff0c;执行报错元素无法点击&#xff1a;ElementClickIn…

基础算法之Huffman编码

// Type your code here, or load an example. #include<iostream> #include<string> #include<queue> #include <unordered_map> #include <vector>using namespace std;//树节点结构 struct Node {char ch;int freq;Node *left;Node *right;No…

【数据结构】(一)从绪论到各种线性表

目录 一、绪论Introduction 1、数据结构 2、逻辑结构&#xff08;数据元素之间的相互关系&#xff09; 3、物理结构&#xff08;数据逻辑结构在计算机中的存储形式&#xff09; 4、数据类型&#xff08;一组性质相同的值的集合及定义在此集合上的一些操作的总称&#xff09…

幻兽帕鲁服务器多少钱?2024年Palworld游戏主机费用

幻兽帕鲁服务器多少钱&#xff1f;价格便宜&#xff0c;阿里云4核16G幻兽帕鲁专属服务器32元1个月、66元3个月&#xff0c;4核32G配置113元1个月、339元3个月&#xff1b;腾讯云4核16G14M服务器66元1个月、277元3个月、1584元一年。阿腾云atengyun.com分享阿里云和腾讯云palwor…

Python算法题集_找到字符串中所有字母异位词

本文为Python算法题集之一的代码示例 题目438&#xff1a;找到字符串中所有字母异位词 说明&#xff1a;给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词 的子串&#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字…

Java基础—面向对象OOP—18三大特性:封装、继承与多态

由于本身理解还不是很到位&#xff0c;所以写的很绕&#xff0c;后续待补充优化 1、封装&#xff08;底层&#xff09;&#xff1a;该露的露&#xff0c;该藏的藏 高内聚&#xff1a;类的内部数据操作细节自己完成&#xff0c;不允许外部干涉低耦合&#xff1a;仅暴露少量的方…

休息日的思考与额外题——链表

文章目录 前言链表知识点 一、 92. 反转链表 II二、21. 合并两个有序链表总结 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招&#xff0c;计划二刷完卡子哥的刷题计划&#xff0c;加油&#xff01; 二刷决定精刷了&#xff0c;于是参加了卡子哥的刷题班&#xff0c;训练…

2023年算法SAO-CNN-BiLSTM-ATTENTION回归预测(matlab)

2023年算法SAO-CNN-BiLSTM-ATTENTION回归预测&#xff08;matlab&#xff09; SAO-CNN-BiLSTM-Attention雪消融优化器优化卷积-长短期记忆神经网络结合注意力机制的数据回归预测 Matlab语言。 雪消融优化器( SAO) 是受自然界中雪的升华和融化行为的启发&#xff0c;开发了一种…

Linux true/false区分

bash的数值代表和其它代表相反&#xff1a;0表示true&#xff1b;非0代表false。 #!/bin/sh PIDFILE"pid"# truenginx进程运行 falsenginx进程未运行 checkRunning(){# -f true表示普通文件if [ -f "$PIDFILE" ]; then# -z 字符串长度为0trueif [ -z &qu…

shell脚本——条件语句

目录 一、条件语句 1、test命令测试条件表达式 2、整数数值比较 3、字符串比较 4、逻辑测试&#xff08;短路运算&#xff09; 5、双中括号 二、if语句 1、 分支结构 1.1 单分支结果 1.2 双分支 1.3 多分支 2、case 一、条件语句 条件测试&#xff1a;判断某需求是…

IP关联是什么?有什么后果?如何防止电商账号因IP关联被封?

在跨境电商的世界里&#xff0c;IP关联给多账号运营的商家带来了挑战。比如&#xff0c;亚马逊IP关联规则的执行对于那些经营多个店铺的卖家来说可能是一个不小的障碍。IP关联的影响不只是限于亚马逊&#xff0c;其他平台如Instagram、Facebook也有类似的机制&#xff0c;在之前…