[L110] 剪枝

news/2023/11/28 12:32:10

参考 https://leetcode.cn/problems/balanced-binary-tree/solution/balanced-binary-tree-di-gui-fang-fa-by-jin40789108/

剪枝

判定是不是平衡二叉树,只有有一个子树不是那么就可以判定这棵树不是平衡二叉树。也就是说,只要出现了false,就没必要再去检查其他子树。

这是我的写法

public static boolean isBalanced(TreeNode root) {if(root==null) return true;return ss(root,0)>0;}
public static int ss(TreeNode node,int i){if(node==null){return i;}int m = ss(node.left,i+1);int n = ss(node.right,i+1);if(Math.abs(m-n)>1||m<0||n<0){return -1;}else{return Math.max(m,n);}}

这是标准答案

class Solution {public boolean isBalanced(TreeNode root) {return recur(root) != -1;}private int recur(TreeNode root) {if (root == null) return 0;int left = recur(root.left);if(left == -1) return -1;int right = recur(root.right);if(right == -1) return -1;return Math.abs(left - right) < 2 ? Math.max(left, right) + 1 : -1;}
}

这两种唯一的区别就是出口,标准答案是提前返回了,而我写的是在处理完左右子树之后才返回,标准答案完成了剪枝。
在这里插入图片描述
在上面这种情况下,标答可以剪去红色部分。


另外信息时自底向上汇聚的,在返回的同时,将信息也返回了。而不是单独再去计算这个节点的深度,下面这个就是非自底向上。

class Solution {public boolean isBalanced(TreeNode root) {if (root == null) return true;return Math.abs(depth(root.left) - depth(root.right)) <= 1 && isBalanced(root.left) && isBalanced(root.right);}private int depth(TreeNode root) {if (root == null) return 0;return Math.max(depth(root.left), depth(root.right)) + 1;}
}

http://www.ppmy.cn/news/875604.html

相关文章

OneFlow源码解析:Global Tensor

撰文 | 郑建华 更新&#xff5c;赵露阳 上文中讲到的类似于PyTorch中的普通Tensor&#xff0c;在OneFlow中称为Local Tensor。Local Tensor是单卡视角下的普通Tensor。与之相对&#xff0c;OneFlow中还有一个独有的概念——Global Tensor。 Global Tensor是指被placement和SBP属…

svg的path标签的d属性

<svgwidth"200"height"200"viewBox"0 0 200 200"style"border: 1px solid red"><pathd"M10 10 L110 10 L110 110 L10 110 Z"fill"none "stroke"green"></path></svg>运行效果…

电感啸叫产生的根本原因及解决方法

电感啸叫产生的根本原因及解决方法 【摘 要】环形电感或工形电感啸叫问题&#xff0c;在稳压电源电路的设计经常遇到&#xff0c;根据稳压电源芯片的不同和外围电路的不同&#xff0c;解决方法也各不相同&#xff0c;本文档的宗旨是分析电感啸叫的根本原因&#xff0c;并综合各…

L110平衡二叉树

平衡二叉树 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 1.错误尝试 class Solution {public boolean isBalanced(TreeNode root) {if…

数据结构-双向带头循环链表

链表的分类实现带有哨兵位的双向的循环链表**定义节点的结构**初始化单个节点初始化带有哨兵位的双向循环链表打印链表销毁链表尾插尾删头插头删find函数在任意位置之前插入任意位置的删除全部代码list.hlist.ctest.c 链表和顺序表的区别 链表的分类 如下 根据上述的三种组合…

Java之引用、软引用、弱引用、虚引用

Java之引用、软引用、弱引用、虚引用 强引用&#xff08;StrongReference&#xff09; 强引用是开发过程中最常用的引用方式&#xff0c;当一个对象具有强引用时&#xff0c;操作系统进行 GC 回收处理是不会回收强引用的对象&#xff0c;即使系统内存不足&#xff0c;Java虚拟…

戴尔电脑开机出现support assist 如何关闭

1、按F2进入BIOS&#xff1b; 2、选择第五大项&#xff0c;打开Secure boot&#xff0c;选择SCEURE BOOT ENABLE 选择Disable &#xff1b; 3、选择第一大项&#xff0c;打开ADVANCED BOOT OPTIONS, 右侧对话框ENABLE选择LEGACY OPTION ROMS前面打钩 &#xff1b; 4、选择第一…

计算机何种情况会休眠,电脑长期处于休眠状态对电脑有损害吗

长时期休眠本身对电脑没什么损害的。 休眠是把内存里的数据完整地保存到硬盘上一块指定的相同大小的区域内&#xff0c;然后再关机&#xff0c;下次开机时&#xff0c;系统会从硬盘上把数据读出来放回内存中&#xff0c;这样就可以继续上次休眠时的操作。对电脑是没有任何损害的…

防止电脑(空闲)休眠小工具

防止电脑(空闲)休眠小工具。它是一款简单的小工具&#xff0c;它通过自动移动光标&#xff0c;来防止电脑启动屏保、进入休眠&#xff0c;或其他什么不能让电脑闲置的工作。 可以用来挂网课等等。。。 原理就是检测键盘鼠标空闲5分钟之后&#xff0c;就动一动鼠标&#xff08…

戴尔电脑网卡远程唤醒wake on lan

戴尔电脑网卡远程唤醒wake on lan BIOS中设置 wake on lan 启用&#xff0c;必选项deep sleep control 禁用&#xff0c;必选项block sleep 禁用&#xff0c;必选项AC Recovery 开机或上一次状态&#xff0c;可选项&#xff0c;如不选&#xff0c;则非正常关机的win10系统无法…

Dell戴尔笔记本安装win8.1后关闭显示器/睡眠/休眠无法唤醒解决方案

Dell戴尔笔记本安装win8.1后关闭显示器/睡眠/休眠无法唤醒解决方案 参考文章&#xff1a; &#xff08;1&#xff09;Dell戴尔笔记本安装win8.1后关闭显示器/睡眠/休眠无法唤醒解决方案 &#xff08;2&#xff09;https://www.cnblogs.com/conanliu/p/3785846.html 备忘一下…

自动化测试面临的问题剖析

前面的文章为大家介绍了我们内部在使用的一些自动化框架&#xff0c;大家可以了解到我们使用的自动化测试框架太多。测试工程师就会面临这样的问题&#xff1a;到底应该选择哪个框架&#xff1f;应该选择哪种脚本语言&#xff1f;有什么办法能降低编写脚本的门槛&#xff1f;这…

棒球装备介绍·棒球1号位

棒球装备介绍 1. 棒球装备介绍 棒球装备的构成复杂且繁多&#xff0c;从外观上看&#xff0c;包括了头盔、护具、手套、球棒、球鞋&#xff0c;但在这看似简单的装备之下&#xff0c;却隐藏了无限的细节。要真正了解棒球装备&#xff0c;我们需要从每一个装备的功能和特点出发…

amigo幸运字符什么意思_无线网络ssid是什么意思(全面解析SSID涵义)

什么事SSID广播&#xff1f;如果你用WiFi的话&#xff0c;一定会注意到有一个词叫ssid&#xff0c;这是什么意思呢&#xff1f;WiFi设置中屏蔽SSID广播有什么用&#xff1f;情况下文介绍。 (原创文章) 解释&#xff1a; SSID是一个无线局域网络(WLAN)的名称。SSID是区分大小写的…

linux 中文ssid 显示,无法连接中文 SSID 的 Wi-Fi?简单几步就搞定!

忙里偷闲&#xff0c;今天把树莓派拿出来准备搞点事情&#xff0c;但发现宿舍的中文 SSID 无法被树莓派正确识别&#xff0c;变成了一堆 16 进制数&#xff1a; 虽然如此&#xff0c;但我猜测只是显示上的问题&#xff0c;猜得出是哪个 Wi-Fi&#xff0c;剩下应该就没什么问题了…

android 获取ssid 为unknown ssid解决办法

我用的是华为Nova手机 鸿蒙系统&#xff0c;开发Android APP 用如下代码获取wifi ssid时为unknown ssid: /*** 获得SSID*/public static String getSSID(Context ctx) {WifiManager wifiManager (WifiManager) ctx.getSystemService(Context.WIFI_SERVICE);WifiInfo wifiInfo …

android ssid乱码,关于讲解win7无线中文ssid乱码的处理举措

不知道各位网友有没有遇到过win7无线中文ssid乱码的问题&#xff0c;今天有一位网友说他就遇到了&#xff0c;要是你的电脑知识不够丰富&#xff0c;那面对win7无线中文ssid乱码的问题就不知道怎么办了。我们应当如何处理这个问题呢&#xff1f;这样的步骤就可以解决&#xff1…

android获取wifi的SSID

由于安卓版本不同,获取SSID的方式也不一样,之前因为版本的原因导致获取到的SSID为空.先上代码 public String getWifiName(Context context){//获取Wifi的SSIDWifiManager wifiManager(WifiManager) context.getSystemService(context.WIFI_SERVICE);if(Build.VERSION.SDK_INT…

SSID,BSSID,ESSID 区别介绍

微信扫码&#xff0c;给个关注吧 SSID、BSSID、BSS等区分 802.11基本元素综述 SSID &#xff08;Service Set Identifier&#xff09;&#xff1a;服务集标识符 BSA &#xff08;Basic Service Area&#xff09;&#xff1a;基本服务区域 BSS &#xff08;Basic Service …

深度剖析WiFi的SSID问题

最近在研究字符编码问题&#xff0c;正好想到WiFi SSID的问题&#xff0c;今天就来说说这个SSID的编码和显示问题&#xff0c;尤其是大家一直关心的各种操作系统对中文SSID的显示乱码问题。 首先我们先简单聊下编码&#xff0c;编码最基本的就是UTF-8&#xff0c;UTF-16, UTF-3…
最新文章