一天一大 lee(平衡二叉树)难度:简单-Day20200817
时间:2022-07-25
本文章向大家介绍一天一大 lee(平衡二叉树)难度:简单-Day20200817,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目:[1]
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
示例
- 示例 1 给定二叉树 [3,9,20,null,null,15,7]
3
/
9 20
/
15 7
返回 false
- 示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4]
1
/
2 2
/
3 3
/
4 4
返回 false
抛砖引玉
抛砖引玉
二叉树遍历,递归
- 参数,要检查是否平衡的节点
- 返回:
- 为空,返回 true
- 不为空,需要判断左右节点的子节点是否平衡且子节点高度差值是否<=1
自顶向下的递归
从根节点递归 逐个节点计算其子节点高度
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {boolean}
*/
var isBalanced = function (root) {
if (!root) return true
return Math.abs(height(root.left) - height(root.right)) <= 1 && isBalanced(root.left) && isBalanced(root.right);
// 计算传入节点的高度 => 左子节点+右子节点高度
function height(node) {
if (!node) return 0
return Math.max(height(node.left), height(node.right))+1
}
}
自底向上的递归
- 逐层计算子节点左右子节点的高度数时直接判断该子节点是否平衡,如果不平衡则整个二叉树都不可能是平衡二叉树
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {boolean}
*/
var isBalanced = function (root) {
return height(root) >= 0;
function height(node) {
if (!node) return 0
let left = height(node.left),
right = height(node.right);
// 存在左右节点高度差值大于1的节点,则整个二叉树都不可能是平衡二叉树
if (left === -1 || right === -1 || Math.abs(left - right) > 1) {
return -1;
} else {
// 如果节点平衡返回节点高度
return Math.max(left, right) + 1;
}
}
}
[1]
题目:: https://leetcode-cn.com/problems/balanced-binary-tree/
- 零基础学编程023:用with实现优雅地释放资源
- Start transaction not working with Revit 2014
- 零基础学编程034:解决一个pandas问题
- ShellExecute 启动外部程序 参数详细介绍
- 零基础学编程033:字符串的split拆分与join连接
- 零基础学编程032:生成二维码
- C#,一些非常简单但应该知道的知识点
- C#神奇的扩展方法
- 使用Python制作一个简单的刷博器
- 零基础学编程031:Python与其它语言最不同的一条语法规则
- dedecms批量导出新增文章url和标题
- 明理知意:复合索引优化及索引访问原理
- WCF配置文件与文件下载之坎坷路
- 零基础学编程030:像黑客般玩玩字符艺术
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法