Day18 代码随想录(1刷) 二叉树

news2024/11/15 9:12:39

513. 找树左下角的值

给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。

假设二叉树中至少有一个节点。

示例 1:

输入: root = [2,1,3]
输出: 1

示例 2:

输入: [1,2,3,4,null,5,6,null,null,7]
输出: 7

提示:

  • 二叉树的节点个数的范围是 [1,104]
  • -231 <= Node.val <= 231 - 1 

状态:完成,使用层序遍历

思路:层序遍历最后一层的第一个元素。

class Solution {
    public int findBottomLeftValue(TreeNode root) {
        Queue<TreeNode> queue =new LinkedList<>();
        ArrayList<List<Integer>> list =new ArrayList<>();
        queue.add(root);
        while(queue.size()>0){
            int size=queue.size();
            ArrayList<Integer> list2 =new ArrayList<>();
            for(int i=0;i<size;i++){
                TreeNode node =queue.poll();
                list2.add(node.val);
                if(node.left!=null) queue.add(node.left);
                if(node.right!=null) queue.add(node.right);
            }
            list.add(list2);
        }
        return list.get(list.size()-1).get(0);
    }
}

 112. 路径总和

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。

叶子节点 是指没有子节点的节点。

示例 1:

输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出:true
解释:等于目标和的根节点到叶节点路径如上图所示。

示例 2:

输入:root = [1,2,3], targetSum = 5
输出:false
解释:树中存在两条根节点到叶子节点的路径:
(1 --> 2): 和为 3
(1 --> 3): 和为 4
不存在 sum = 5 的根节点到叶子节点的路径。

示例 3:

输入:root = [], targetSum = 0
输出:false
解释:由于树是空的,所以不存在根节点到叶子节点的路径。

提示:

  • 树中节点的数目在范围 [0, 5000] 内
  • -1000 <= Node.val <= 1000
  • -1000 <= targetSum <= 1000

 状态:完成

思路:遍历到叶子节点对比叶子节点跟目标值是否一直,如果一直说明该路径的总和跟目标值一直。该题使用前序遍历。

class Solution {
    public boolean hasPathSum(TreeNode root, int targetSum) {
        if(root==null&&targetSum==0) return false;
        if(root==null) return false;
        boolean flag =hasPathSum2(root,targetSum);
        return flag;
    }
    public boolean hasPathSum2(TreeNode root,int targetSum){
        if(root.left==null&&root.right==null&&root.val==targetSum) return true;
        boolean flag=false;
        if(root.left!=null){
            flag=hasPathSum2(root.left,targetSum-root.val);
        }
        if(flag) return flag;
        boolean flag2=false;
        if(root.right!=null){
            flag2=hasPathSum2(root.right,targetSum-root.val);
        }    
        if(flag2) return flag2;
        return false;
    }
}

106. 从中序与后序遍历序列构造二叉树

给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。

示例 1:

输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3]
输出:[3,9,20,null,null,15,7]

示例 2:

输入:inorder = [-1], postorder = [-1]
输出:[-1]

提示:

  • 1 <= inorder.length <= 3000
  • postorder.length == inorder.length
  • -3000 <= inorder[i], postorder[i] <= 3000
  • inorder 和 postorder 都由 不同 的值组成
  • postorder 中每一个值都在 inorder 中
  • inorder 保证是树的中序遍历
  • postorder 保证是树的后序遍历

 状态:完成

思路:后序遍历的最后一个字符就是该树的根节点,然后在中序遍历中根据这一特性划分左右子树完成题目。前序遍历就是第一个字符就是该树的根节点,同上完成。

class Solution {
    public TreeNode buildTree(int[] inorder, int[] postorder) {
        if(inorder.length==0) return null;
        int gen=postorder[inorder.length-1];
        TreeNode root=new TreeNode(gen);
        int index=0;
        for(int i=0;i<inorder.length;i++){
            if(inorder[i]==gen){
                index=i; 
                break;
            }
        }
        TreeNode left=buildTree(Arrays.copyOfRange(inorder,0,index),Arrays.copyOfRange(postorder,0,index));
        TreeNode right=buildTree(Arrays.copyOfRange(inorder,index+1,inorder.length),Arrays.copyOfRange(postorder,index,postorder.length-1));
        root.right=right;
        root.left=left;
        return root;
    }
}

根据前序跟中序:

class Solution {
    public TreeNode buildTree(int[] preorder, int[] inorder) {
        if(inorder.length==0) return null;
        int gen=preorder[0];
        TreeNode root=new TreeNode(gen);
        int index=0;
        for(int i=0;i<inorder.length;i++){
            if(inorder[i]==gen){
                index=i; 
                break;
            }
        }
        TreeNode left=null;
        TreeNode right=null;
        if(index>0)
        left=buildTree(Arrays.copyOfRange(preorder,1,index+1),Arrays.copyOfRange(inorder,0,index));
        if(index<inorder.length-1)
        right=buildTree(Arrays.copyOfRange(preorder,index+1,preorder.length),Arrays.copyOfRange(inorder,index+1,inorder.length));
        root.right=right;
        root.left=left;
        
        return root;
    }
}

感想:今天的题目比较靠基础和二叉树的特性,不会就比较难做了。周赛有个新的数据结构红黑树,这是个非严格的二叉搜索树可以进行排序,这个我还没搞明白。

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

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

相关文章

echarts 柱形图如何让其中一个柱子的颜色跟其他柱子不同

如何让其中一个柱子的颜色跟其他柱子不同 series: [{data: [120,// 使用对象的形式&#xff0c; value代表当前值, itemStyle设置样式{value: 200,itemStyle: {color: #a90000}},150,80,70,110,130],type: bar}]设置单个柱子颜色&#xff1a; 柱形图单个柱子颜色: https://e…

AI预测福彩3D第17弹【2024年3月25日预测--第4套算法重新开始计算第3次测试】

昨天对第4套算法进行了第二次测试&#xff0c;其中第二套方案已成功命中。测试的目的主要是为了记录统计两套方案的稳定性和命中率。今天继续对第4套算法进行测试&#xff0c;今天是第3次测试&#xff0c;同样测试两个方案。废话不多说&#xff0c;直接上结果。 2024…

【Qt问题】Qt中文乱码问题解决方案(详细汇总)

【Qt问题】Qt中文乱码问题解决方案&#xff08;详细汇总&#xff09; 一、问题描述&#xff1a; 由于Qt对中文的支持不是很好&#xff0c;使用QtCreator进行开发的过程中&#xff0c;经常会出现各种乱七八糟的中文乱码问题&#xff0c;比如我前面遇到的 【Qt问题】初始化菜单…

一个开源的分布式在线教育系统

项目介绍 roncoo-education —— 一个分布式在线教育系统。目前主要功能有课程点播功能&#xff0c;支持多家视频云的接入&#xff0c;课程附件管理功能&#xff0c;支持多家存储云的接入&#xff0c;可以帮助个人或者企业快速搭建一个轻量级的在线教育平台。 系统分为后台、前…

Python数据匹配和记录链接库之recordlinkage使用详解

概要 Python的recordlinkage库为数据匹配和记录链接提供了一个强大的工具集,使得从不同数据源识别重复或相关记录变得简单高效。这对于数据清洗、合并数据集、实体识别等任务至关重要。 recordlinkage库简介 recordlinkage提供了一套全面的工具来进行复杂的记录比较、匹配和…

程序人生 - 某程序员哀叹:辛辛苦苦写几年代码,做了些业务,有了点成就感,但回头一看80%都没用,没法写到简历上!

什么事情会让你脊背一凉&#xff0c;细思极恐&#xff1f; 一位程序员说了一件很可怕的事&#xff1a; 辛辛苦苦写了几年代码&#xff0c;做了些业务&#xff0c;在一片祥和中有了点成就感。然而回头一看&#xff0c;80&#xff05;是没啥用的&#xff0c;甚至没法写到简历上&…

[ Linux ] git工具的基本使用(仓库的构建,提交)

1.安装git yum install -y git 2.打开Gitee&#xff0c;创建你的远程仓库&#xff0c;根据提示初始化本地仓库&#xff08;这里以我的仓库为例&#xff09; 新建好仓库之后跟着网页的提示初始化便可以了 3.add、commit、push三板斧 git add . //add仓库新增&#xff08;变…

HTTP状态码(3)

HTTP 状态码负责表示客户端 HTTP 请求的返回结果、标记服务器端的处理是否正常、通知出现的错误等工作 状态码告知从服务器端返回的请求结果 状态码的职责是当客户端向服务器端发送请求时&#xff0c;描述返回的请求结果。借助状态码&#xff0c;用户可以知道服务器端是正常…

vue+elementUI实现树形穿梭框

1.实现效果 2.整体思路 将左侧选中的节点移动到右侧&#xff0c;还要保持树结构&#xff0c;意味着移动子节点&#xff0c;需要把该子节点对应的父节点甚至父节点的父节点一并移到右侧形成一个新的树结构&#xff0c;树结构的层级和原来的树保持一致&#xff0c;只是右侧展示…

TOP、CCF、IEEE-Trans系列SCI,均2个月左右录用!进展超顺!

能源工程类SCIE&#xff08;中科院TOP&#xff0c;周期短&#xff09; 【期刊简介】IF&#xff1a;11.0-12.0&#xff0c;JCR1区&#xff0c;中科院1区TOP 【出版社】ELSEVIER出版社 【版面情况】正刊&#xff0c;2024.03.31截稿 【预警情况】2020-2024年无预警记录 【检索…

机器学习(27)

文章目录 文献阅读1. 题目2. abstract3. 网络架构3.1 Theoretical Results 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过程4.3.1 数据集4.3.2 参数设置 4.4 结论 三、实现GAN1. 任务要求2. 实验结果3.实验代码3.1数据准备3.2 模型构建3.3 展示函数3.4 训练过程 小结本周内…

在线一问一答网页版源码系统 源码全开源可二次开发 带完整的安装代码包以及系统搭建教程

在信息化社会&#xff0c;知识共享和互动交流成为了人们日常生活和工作中不可或缺的一部分。在线问答系统作为连接知识提供者和需求者的桥梁&#xff0c;具有广阔的市场前景和巨大的社会价值。然而&#xff0c;传统的问答系统往往存在功能单一、定制性差、开发成本高等问题&…

数据库读写分离分案

环境&#xff1a;MySQL主从数据库。如需要搭建可参考上一篇文章&#xff1a;MySQL主从数据库简单搭建 数据库使用主从可确保数据一致性&#xff0c;示例是基于一个完整的项目之上做了一些修改&#xff0c;为测试效果直接连接了两个非主从配置的数据库&#xff0c;其中只有测试…

Linux cp、mv命令显示进度条

1.advcpmv 平常使用cp 拷贝大文件时&#xff0c;看不到多久可以完成&#xff0c;虽然加上-v参数也只能看到正在拷贝文件&#xff0c;那就使用以下方法实现 git clone https://github.com/jarun/advcpmv.git cd advcpmv/ bash install.shmv ./advcp /usr/local/bin/ mv ./advmv …

Vite+Vue3+TS+Vue-Router+Axios+Pinia开发模板

一、模板介绍 VUE3开发全家桶模板&#xff0c;安装了ts,router,axios,pinia并提供了简单示例并提供了它们的官网链接。 对axios进行了简单封装。 二、下载地址 https://github.com/yigedayouzi/ViteTemplateOne 三、快速开始 1、git clone gitgithub.com:yigedayouzi/Vite…

备忘录导出的HTML文档转换MarkDown尝试记录

备忘录导出的HTML文档转换MarkDown尝试记录 1. pandoc命令行2. HTML转换MARKDOWN3. MD导入CSDN记录过长报错及压缩尝试参考 本地备忘录写了些旅游攻略&#xff0c;想做个纪念&#xff0c;导出为长图片ok&#xff0c;导出为HTML&#xff0c;也可以。但是导出图片是base64格式的&…

VMware Live Site Recovery 9.0 - 数据中心灾难恢复 (DR)

VMware Live Site Recovery 9.0 - 数据中心灾难恢复 (DR) VMware Site Recovery Manager, VMware SRM 现已更名为 VMware Live Site Recovery 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-live-site-recovery-9/&#xff0c;查看最新版。原创作品&#xff0c;转…

控价其实是对品牌市场的保护

品牌发展过程中&#xff0c;如果有越来越多的经销商加入&#xff0c;必然要做好控价&#xff0c;否则渠道的混乱&#xff0c;会使得品牌价值受损&#xff0c;比如低价的出现&#xff0c;会影响正规经销商的出货&#xff0c;使其竞争力增加&#xff0c;同时价格的不稳定会连带产…

【框架】说一说 Fork/Join?

SueWakeup 个人主页&#xff1a;SueWakeup 系列专栏&#xff1a;学习Java框架 个性签名&#xff1a;人生乏味啊&#xff0c;我欲令之光怪陆离 本文封面由 凯楠&#x1f4f7; 友情赞助 目录 前言 什么是 Fork&#xff1f; 什么是 Join&#xff1f; Fork/Join 的核心组件 F…

用友 GRP-U8 sqcxIndex SQL 注入漏洞

产品简介 用友GRP-U8R10行政事业内控管理软件是用友公司专注于国家电子政务事业&#xff0c;基于云计算技术所推出的新一代产品&#xff0c;是我国行政事业财务领域最专业的政府财务管理软件。 漏洞描述 用友GRP-U8 sqcxIndex.jsp接口存在SQL注入漏洞&#xff0c;未经身份认…