110. 平衡二叉树

110. 平衡二叉树

  • 原题链接:
  • 完成情况:
  • 解题思路:
  • 参考代码:
    • 递归法:
    • 迭代法
  • 错误经验吸取

原题链接:

110. 平衡二叉树

https://leetcode.cn/problems/balanced-binary-tree/description/

完成情况:

在这里插入图片描述

解题思路:

就是要算高度,然后比较每一次迭代过程中的高度。

参考代码:

递归法:

package 代码随想录..二叉树;import 代码随想录..TreeNode;import java.util.LinkedList;
import java.util.Map;
import java.util.Queue;public class _110平衡二叉树_递归法 {/***一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。** @param root* @return*/public boolean isBalanced(TreeNode root) {return getHeight(root)!= -1;}/**** @param root* @return*/private int getHeight(TreeNode root) {if (root == null) {return 0;}int leftHeight = getHeight(root.left);if (leftHeight == -1) {return -1;}int rightHeight = getHeight(root.right);if (rightHeight == -1) {return -1;}if (Math.abs(leftHeight - rightHeight) > 1) {return -1;}return Math.max(leftHeight, rightHeight) + 1;}
}

迭代法

package 代码随想录..二叉树;import 代码随想录..TreeNode;import java.util.ArrayDeque;
import java.util.Deque;
import java.util.LinkedList;
import java.util.Queue;public class _110平衡二叉树_迭代 {/**** @param root* @return*/public boolean isBalanced(TreeNode root) {if (root == null) {return true;}Deque<TreeNode> myStack = new LinkedList<TreeNode>();TreeNode prev = null;while (!myStack.isEmpty() || root!= null) {while (root!= null) {myStack.push(root);root = root.left;}TreeNode node = myStack.peek();// 右结点为null或已经遍历过if (node.right == null || node.right == prev) {if (Math.abs(getHeight(node.left) - getHeight(node.right)) > 1) {return false;}myStack.pop();prev = node;root = null;// 当前结点下,没有要遍历的结点了}else {root = node.right;}}return true;}/*** 层序遍历,求结点的高度** @param node* @return*/private int getHeight(TreeNode node) {if (node == null) {return 0;}Deque<TreeNode> queue = new LinkedList<TreeNode>();queue.offer(node);int height = 0;while (!queue.isEmpty()) {int size = queue.size();height++;while (size > 0) {TreeNode curNode = queue.poll();if (curNode.left!= null) {queue.offer(curNode.left);}if (curNode.right!= null) {queue.offer(curNode.right);}}}return height;}
}

错误经验吸取

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

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

相关文章

智慧工地网络广播系统

智慧工地网络广播系统 智慧工地网络广播&#xff0c;是智慧公司不可缺少的一环&#xff0c;对于工地广播来说&#xff0c;音质和传输稳定性都是非常重要的要素。尤其是在高楼大厦密集的地方&#xff0c;可能会存在信号干扰和传输受阻的情况&#xff0c;这时候可以考虑使用网络…

2023.11.21使用<button>元素来触发form表单和数据提交

2023.11.21使用&#xff1c;button&#xff1e;元素来触发form表单和数据提交 除了使用<input>中的submit方式进行form表单和数据提交&#xff0c;还可以使用button方式&#xff0c;两种方式视使用场景&#xff0c;各有优点。 方法一&#xff1a;可以将<button>放…

hadoop 常用端口号,常用配置文件都有哪些?hadoop3.x端口号 hadoop(十二)

1. hadoop3.x系列常用端口号&#xff1a; 类型desc端口hdfs NameNode内部通常端口号8020/9000/9820 hdfs NameNode 对用户的查询端口9870yarn查看历史任务运行情况8088历史服务器19888 2. hadoop 2.x系列常用端口号&#xff1a; 类型desc端口 hdfs NameNode 内部通常端口802…

Spring Boot 自动配置

1. Spring Boot 自动配置 Spring Boot的自动配置是其核心特性之一&#xff0c;旨在简化Spring应用程序的配置过程。这个特性通过合理的默认值以及根据类路径和其他因素自动配置Spring Beans来极大地减少了配置的工作量。以下是Spring Boot自动配置的详细讲解&#xff1a; 基本…

VueH5公众号分享到微信朋友圈或好友

场景需求&#xff1a; 一般分享场景是在当前页面分享当前页面&#xff0c;但是业务需求是&#xff0c;在当前页面分享好几个其他页面的链接到朋友圈和好友。 PS&#xff1a;微信自带的分享面板是无法第三方唤起的&#xff0c;只能点三个点。 其次在微信公众号页也不支持自定义…

redis---非关系型数据库

关系数据库与非关系型数据库 redis非关系型数据库&#xff0c;又名缓存型数据库。数据库类型&#xff1a;关系型数据库和非关系型数据库关系型数据库是一 个机构化的数据库,行和列。 列&#xff1a;声明对象。 行&#xff1a;记录对象属性。 表与表之间的的关联。 sql语句&…

Linux fork和vfork函数用法

fork和vfork是用于创建新进程的函数&#xff0c;在Linux的C语言编程中非常常见。 fork函数 fork函数是用于创建一个新的进程&#xff0c;新进程是调用进程的副本。新进程将包含调用进程的地址空间、文件描述符、栈和数据。在fork之后&#xff0c;父进程和子进程将并发执行。 …

【giszz笔记】产品设计标准流程【5】

&#xff08;续上回&#xff09; 目录 五、原型设计 1.写在前面的话 2.原型是什么 3.画原型的工具 4.产品经理的复合能力 5.关于原型图 PS&#xff1a;这个系列&#xff0c;主要讨论的是产品设计的一般标准流程。这个流程也许每天都发生在我们的身边&#xff0c;我们也常…

MatrixOne完成与麒麟信安、欧拉的兼容互认

近日&#xff0c;超融合异构云原生数据库MatrixOne企业版软件V1.0完成了与欧拉开源操作系统&#xff08;openEuler简称“欧拉”&#xff09;、麒麟信安操作系统系列产品和虚拟化平台的相互兼容认证&#xff0c;通过了欧拉兼容性测评&#xff0c;获得了《openEuler技术测评证书》…

ByteBuffer

参考文章&#xff1a; 1、ByteBuffer常用方法详解_bytebuffer.wrap(data, offset, 4).getint()得到得值过大-CSDN博客

Pycharm run 输出界面控制一行能够输出的元素个数

Pycharm run 输出界面控制一行能够输出的元素个数 今天遇到了一个问题&#xff0c;当我们在 Pycharm 中打印输出数组时&#xff0c;如果数组一行的元素个数过多&#xff0c;那么我们在打印时就会出现以下问题。 代码如下&#xff1a; import numpy as npx np.array([[0., 0.7…

前端UI工具(主要适用于JAVa,layui+easyui+elementui等及UI对比)

一、常见前端UI工具 前端开发中有许多流行的UI工具和框架&#xff0c;它们提供了丰富的组件、样式和功能&#xff0c;有助于加速界面开发。以下是一些常用的前端UI工具和框架&#xff1a; Bootstrap: 描述&#xff1a; Bootstrap 是一个开源的前端框架&#xff0c;提供了一套用…

webstorm配置console.log打印

一、设置面板 打开设置面板(windows 快捷键&#xff1a; ctrl alt s) &#xff0c;找到 编辑器 -> 实时模板 -> JavaScript -> log&#xff0c;点击log会出现对应的配置 二、模板文本 将下面这些模板文本粘贴进去 console.info("&#x1f680; ~ file:$file…

es各种报错问题及解决方案20231121

报错一 org.elasticsearch.ElasticsearchStatusException: Elasticsearch exception [typesearch_phase_execution_exception, reasonall shards failed]Suppressed: org.elasticsearch.client.ResponseException: method [POST], host [http://localhost:9200], URI [/wzx-te…

【VUE+Elemet 】正则验证 + 表单验证 + 注意事项

目录 一、正则验证 1.输入字母/数字/下划线&#xff1a; 2.请输入中英文/数字/下划线&#xff1a; 3.请输入中文/英文&#xff1a; 4.规范金额&#xff1a; 5.用户名不能全是数字: 6.中文&#xff1a; 7.非中文&#xff1a; 8.限制长度&#xff1a; 9.数字&#xff…

Gensim库——文本处理和主题建模的强大工具

在信息时代&#xff0c;海量的文本数据不断地涌现。如何从这如山如海的文本中提取有意义的信息&#xff0c;成为了一项关键任务。Python语言提供了许多优秀的库和工具来处理文本数据&#xff0c;其中一款备受推崇的工具就是Gensim库。Gensim是一个开源的Python库&#xff0c;它…

洗衣行业在线预约小程序源码系统 附带完整的搭建教程

目前&#xff0c;人们对生活品质的追求不断提高&#xff0c;但生活节奏却也不断加快。对品质的追求遇到了忙碌的生活节奏&#xff0c;人们更渴望以最简单、便捷的方式达到追求品质的目的。同时&#xff0c;由于线上支付的普及&#xff0c;大家更希望足不出户就可以解决自己生活…

“三面一体”的业务调度方案在运营商订单运营的实践

在当前信息化时代&#xff0c;运营商的业务流程复杂度和多样性持续增长&#xff0c;多个系统、部门以及相关事务需要进行高效准确的调度。如何在这样的背景下&#xff0c;保证业务流程的顺畅&#xff0c;业务信息的实时传递以及业务决策的准确性&#xff0c;是业务运营面临的重…

C#写入Datetime到SQL server

文章目录 运行测试插入Datetime 相关知识点Datetime转为字符串字符串转为Datetime彩蛋 运行测试 插入Datetime // 连接数据库操作 string connStr "Data Source[服务器名];" "Initial Catalog[数据库名];" "User ID [用户名];" "Passwor…