双非本科准备秋招(18.1)—— 力扣二叉树

1、404. 左叶子之和

方法一:

        可以在父节点判断一下,如果左子树不为null,并且左子树没有左右子树,说明这是个左叶子节点。

class Solution {public int sumOfLeftLeaves(TreeNode root) {if(root == null) return 0;int LV = sumOfLeftLeaves(root.left);int RV = sumOfLeftLeaves(root.right);int t = 0;if (root.left != null && root.left.left == null && root.left.right == null) { t = root.left.val;}return t+LV+RV;}
}

 方法二,找bug

        一开始我用的递归,用布尔值传值,于是我写了如下代码。

class Solution {static int ans = 0;public int sumOfLeftLeaves(TreeNode root) {preOrder(root, false);return ans;}static void preOrder(TreeNode root, boolean isLeft){if(root == null) return;if(isLeft && root.left == null && root.right == null){ans += root.val;return;}preOrder(root.left, true);preOrder(root.right, false);}
}

        这个测试用例竟然会输出24。

        想了一天,晚上突然明白了,测试用例1答案是24,测试用例2答案应该是0,但是为什么是24呢?因为测试用例2答案在第一个基础上,也就是24+0 = 24

        而我的ans变量是static的,也就是所有实例共享的,把代码改成下面这样就过了。

class Solution {int ans = 0;public int sumOfLeftLeaves(TreeNode root) {preOrder(root, false);return ans;}void preOrder(TreeNode root, boolean isLeft){if(root == null) return;if(isLeft && root.left == null && root.right == null){ans += root.val;return;}preOrder(root.left, true);preOrder(root.right, false);}
}

        

2、513. 找树左下角的值

        这个题应该挺好想的,左下角是最底层,最左边的值,用层序遍历就很好实现,遍历到最后一层记录第一个值就是答案。

class Solution {public int findBottomLeftValue(TreeNode root) {//层序遍历 最后一层 第一个节点LinkedList<TreeNode> q = new LinkedList<>();int ans = 0;if(root == null) return 0;q.offer(root);while(!q.isEmpty()){int len = q.size();for(int i = 0; i < len; i++){TreeNode t = q.poll();if(i == 0) ans = t.val;if(t.left != null){q.offer(t.left);}if(t.right != null){q.offer(t.right);}}}return ans;}
}

3、112. 路径总和

        跟昨天的输出路径题一个套路(257. 二叉树的所有路径),核心还是判断是不是叶子节点,当左右子树都为null并且传的值等于target的时候说明找到了,为了保证不出现空指针异常,每次递归都要判断一下。

class Solution {boolean f = false;public boolean hasPathSum(TreeNode root, int targetSum) {if(root == null) return f;preOrder(root, targetSum, 0);return f;}void preOrder(TreeNode root, int target, int n){if(f) return;n += root.val;if(root.left == null && root.right == null && n == target){f = true;return;}if(root != null && root.left != null) preOrder(root.left, target, n);if(root != null && root.right != null) preOrder(root.right, target, n);}
}

4、654. 最大二叉树

        跟昨天做的根据前序中序构造树一个思路,代码都很像,for循环找到最大值,然后根据最大值位置划分左右子树递归地遍历左右子树,左子树范围0——index,右子树范围index+1——length。

        但是要注意判断一下index是否是边界,也就是为0或length-1的时候,左子树或右子树直接就是null了。

class Solution {public TreeNode constructMaximumBinaryTree(int[] nums) {int r = -1, index = 0;for(int i = 0; i < nums.length; i++){if(nums[i] > r){r = nums[i];index = i;}}TreeNode root = new TreeNode(r);if(index == 0) root.left = null; else root.left = constructMaximumBinaryTree(Arrays.copyOfRange(nums, 0, index));if(index == nums.length-1) root.right = null;else root.right = constructMaximumBinaryTree(Arrays.copyOfRange(nums, index+1, nums.length));return root;}
}

5、617. 合并二叉树

        核心在于如何同步遍历两个二叉树。

        每次把结果都加到root1这棵树上就好,节省空间。

class Solution {public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {if(root1 == null) return root2;if(root2 == null) return root1;root1.val += root2.val;root1.left = mergeTrees(root1.left, root2.left);root1.right = mergeTrees(root1.right, root2.right);return root1;}
}

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

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

相关文章

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Rating组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Rating组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Rating组件 提供在给定范围内选择评分的组件。 子组件 无。 接口 Rating(opt…

ERR_SSL_VERSION_OR_CIPHER_MISMATCH

我在namesilo买的域名&#xff0c;coludflare做的解析&#xff0c;华为云的SSL&#xff0c;用宝塔部署的SSL&#xff0c;访问https报错&#xff0c;http却正常&#xff1a; 报错&#xff1a;此网站无法提供安全连接www.hongkong.ioyunxin.top 使用了不受支持的协议。 ERR_SSL_…

Cocos creator 3.x 刚体组件碰撞无效

Cocos creator 3.x 刚体组件碰撞无效 问题描述&#xff1a;只有一个circleCollider2D时&#xff0c;可以在碰撞时正确输出结果&#xff0c;但是当我在外围加了一个circle之后&#xff0c;期望character进入圆圈范围时就触发方法&#xff0c;此时原代码失效 import { _decorat…

gcore服务器设置root账号密码登录

这个厂商很奇怪&#xff0c;默认只能用centos用户与公钥登录&#xff0c;但是这样有时候很麻烦。 他默认开启了SELinux&#xff0c;和强制ssh密钥登录。 下面所有操作在root模式下进行 SELinux设置为兼容模式 setenforce 0vi /etc/selinux/config然后将文件中的SELINUXenfo…

阿里云服务器centos_7_9_x64位,3台,搭建k8s集群

目录 1.环境信息 2.搭建过程 2.1 安装Docker源 2.2 安装Docker 2.3 安装kubeadm&#xff0c;kubelet和kubectl 2.4 部署Kubernetes Master(node1) 2.5 安装Pod网络插件&#xff08;CNI&#xff09; 2.6 加入Kubernetes Node 2.7 测试kubernetes集群 3.部署 Dashboard…

pytorch tensor维度变换

目录 1. view/reshape2. squeeze/unsqueeze3. expand 扩展4. repeat5 .t转置6. transpose7. permute 1. view/reshape view(*shape) → Tensor 作用&#xff1a;类似于reshape&#xff0c;将tensor转换为指定的shape&#xff0c;原始的data不改变。返回的tensor与原始的tensor…

【Linux系统学习】1.初识Linux

初识Linux 操作系统概述 初识Linux 虚拟机介绍 VMware WorkStation安装 1.操作系统概述 了解操作系统的作用 了解常见的操作系统 1.1 硬件和软件 计算机由哪两个主要部分组成&#xff1f; 硬件&#xff1a;计算机系统中由电子&#xff0c;机械和光电元件等组成的各种物理装置的…

小红的字符串中值

题目描述: 小红定义一个长度为奇数的字符串的“中值”为中间那个字符。例如"kou"的中值是o。 现在小红拿到了一个字符串&#xff0c;她想知道某个字符是多少个子串的中值。你能帮帮她吗&#xff1f; 输入描述: 输出描述: 一个整数&#xff0c;代表中值为chr的连续子串…

2024/02/06

画出TCP三次握手和四次挥手的示意图 三次握手 四次挥手 并且总结TCP和UDP的区别 TCP: TCP提供面向连接的&#xff0c;可靠的数据传输服务传输过程中&#xff0c;数据无误、数据无丢失、数据无失序、数据无重复 TCP会给每个数据包编上编号&#xff0c;该编号称之为序列号每个序…

DDoS攻击激增,分享高效可靠的DDoS防御方案

当下DDoS攻击规模不断突破上限&#xff0c;形成了 "网络威胁格局中令人不安的趋势"。专业数据显示&#xff0c;对比2022年上半年与2023年上半年&#xff0c;所有行业的DDoS攻击频率增加了314%。其中零售、电信和媒体公司遭受的攻击规模最大&#xff0c;三个垂直行业的…

5年前端仔的2023年终总结

突然发现已经有好几个月没有写过博客总结过什么&#xff0c;小小辩解一下&#xff0c;其实并不是笔者停止的学习和总结&#xff0c;随着在前端这个行业的逐年深入&#xff0c;渐渐的很多收获不再是像之前简单的技术点的确定性描述讲解了&#xff0c;而是某个领域的知识体系的串…

【新书推荐】6.3节 指令指针寄存器

8086 CPU内部的指令指针寄存器IP是计算机自动运行程序的关键。指令指针寄存器IP自动指向下一条将要执行的指令。 本节内容&#xff1a;使用指令指针寄存器读取和执行指令的工作原理和段寄存器的引用。 ■指令指针&#xff1a; 8086CPU中的指令指针寄存器IP是16位寄存器。指令指…

Swin-UMamba:结合基于ImageNet的预训练和基于Mamba的UNet模型

摘要 https://arxiv.org/pdf/2402.03302v1.pdf 准确的医学图像分割需要整合从局部特征到全局依赖的多尺度信息。然而&#xff0c;现有方法在建模长距离全局信息方面面临挑战&#xff0c;其中卷积神经网络&#xff08;CNNs&#xff09;受限于其局部感受野&#xff0c;而视觉转换…

Golang 学习(二)进阶使用

二、进阶使用 性能提升——协程 GoRoutine go f();一个 Go 线程上&#xff0c;可以起多个协程&#xff08;有独立的栈空间、共享程序堆空间、调度由用户控制&#xff09;主线程是一个物理线程&#xff0c;直接作用在 cpu 上的。是重量级的&#xff0c;非常耗费 cpu 资源。协…

osg模型的平移、缩放、旋转

加载2个模型&#xff0c;其中一个向上移动28个单位&#xff1b; 加载2个模型&#xff0c;其中一个缩放0.5倍&#xff0c;向下移动22个单位&#xff1b; 加载2个模型&#xff0c;其中一个缩放0.5倍、旋转45度、向右向下移动几个单位&#xff1b; 都是用矩阵实现的&#xff1b; …

Python算法题集_环形链表II

Python算法题集_环形链表II 题142&#xff1a;环形链表II1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【集合检索】2) 改进版一【字典检测】3) 改进版二【双指针】 4. 最优算法 本文为Python算法题集之一的代码示例 题142&#xff1a;环形链…

计算机设计大赛 深度学习+python+opencv实现动物识别 - 图像识别

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数&#xff1a;3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 inception_v3网络5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; *…

AJ-Report 【开源的一个BI平台】

AJ-Report是全开源的一个BI平台&#xff0c;酷炫大屏展示&#xff0c;能随时随地掌控业务动态&#xff0c;让每个决策都有数据支撑。     多数据源支持&#xff0c;内置mysql、elasticsearch、kudu驱动&#xff0c;支持自定义数据集省去数据接口开发&#xff0c;目前已支持30…

【安卓跨程序共享数据,探究ContentProvider】

ContentProvider主要用于在不同的应用程序之间实现数据共享的功能&#xff0c;它提供了一套完整的机制&#xff0c;允许一个程序访问另一个程序中的数据&#xff0c;同时还能保证被访问数据的安全性。 目前&#xff0c;使用ContentProvider是Android实现跨程序共享数据的标准方…

宠物空气净化器哪个牌子好?养猫家庭如何挑选宠物空气净化器?

养猫的朋友都知道&#xff0c;猫咪掉毛是一个令人头痛的问题。猫毛和皮屑会漂浮在空气中&#xff0c;不仅遍布全屋的各个角落&#xff0c;而且清理起来也非常麻烦&#xff0c;特别是那些难以清除的猫毛。更糟糕的是&#xff0c;这些猫毛还可能引发人们的过敏反应&#xff0c;如…