首页 > 其他分享 >8.平衡二叉树

8.平衡二叉树

时间:2023-12-11 18:45:27浏览次数:34  
标签:rightHeight return reCurSion 二叉树 leftHeight 平衡 root

110. 平衡二叉树

1、概要

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。

示例 1:

给定二叉树 [3,9,20,null,null,15,7]

和二叉树最大深度有很大区别

leetcode中强调的深度和高度很明显是按照节点来计算的

image-20231211165019979

因为求深度可以从上到下去查 所以需要前序遍历(中左右),而高度只能从下到上去查,所以只能后序遍历(左右中)

既然要求比较高度,必然是要后序遍历。

虽是返回boolean,但是还是用-1来标记不符合,所以递归函数返回高度,以便计算差值是否大于1。使用abs求绝对值。

2、思路

递归

  • 递归函数的参数和返回值

当前传入节点,返回以当前传入节点为根节点的树的高度

private int reCurSion(TreeNode root)
  • 终止条件

依然是遇到空节点了为终止,返回0

if(root == null){return 0;}
  • 单层逻辑

分别求出其左右子树的高度,然后如果差值小于等于1,则返回当前二叉树的高度,否则返回-1,表示已经不是二叉平衡树了

 		int leftHeight = reCurSion(root.left);
		if(leftHeight == -1){
            return -1;
        }
        int rightHeight = reCurSion(root.right);
        if(rightHeight == -1){
            return -1;
        }
        //左右子树高度差大于1,返回-1,不平衡
        if(Math.abs(leftHeight-rightHeight) > 1){
            return -1;
        }
		//Math.abs() 是 Java 中的一个函数,用于计算一个数的绝对值。这个函数接受一个参数,可以是整数、浮点数或长整型,并返回该数的绝对值。
		//Math.abs() 函数可以用于各种数值类型,包括 int、long、float 和 double。

        return Math.max(leftHeight,rightHeight) +1;

迭代

此题用迭代法,其实效率很低,因为没有很好的模拟回溯的过程,所以迭代法有很多重复的计算。

虽然理论上所有的递归都可以用迭代来实现,但是有的场景难度可能比较大。

3、代码

class Solution {
    public boolean isBalanced(TreeNode root) {
        return reCurSion(root) != -1;
    }

    private int reCurSion(TreeNode root){
        if(root == null){return 0;}
        int leftHeight = reCurSion(root.left);
        if(leftHeight == -1){
            return -1;
        }
        int rightHeight = reCurSion(root.right);
        if(rightHeight == -1){
            return -1;
        }
        //左右子树高度差大于1,返回-1,不平衡
        if(Math.abs(leftHeight-rightHeight) > 1){
            return -1;
        }

        return Math.max(leftHeight,rightHeight) +1;

    }

    
}

标签:rightHeight,return,reCurSion,二叉树,leftHeight,平衡,root
From: https://www.cnblogs.com/autumnmoonming/p/17895116.html

相关文章

  • 7.完全二叉树的节点个数
    222.完全二叉树的节点个数1、概要给出一个完全二叉树,求出该树的节点个数。示例1:输入:root=[1,2,3,4,5,6]输出:6首先按照普通二叉树的逻辑来求。这道题目的递归法(后序)和求二叉树的深度(取MAX)写法类似,而迭代法,遍历模板稍稍修改一下,记录遍历的节点数量就可以了2、思路......
  • 5.二叉树的最大深度
    104.二叉树的最大深度1、概要给定一个二叉树root,返回其最大深度。二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。可以使用前序求深度,也可以使用后序求高度。二叉树节点的深度:指从根节点到该节点的最长简单......
  • C++U5-09-二叉树2
    二叉树(二)二叉树遍历是一种重要的操作,它在许多应用场景中被广泛使用。以下是一些常见的应用场景:查找和搜索:二叉树遍历可以用于查找特定元素或者进行搜索操作。通过遍历整棵树,可以找到目标元素并进行相应的处理。例如,在二叉搜索树中查找某个特定值,或者在字典树中搜索以某个前缀......
  • 平衡树(无旋Treap,范浩强树)学习笔记
    平衡树:YYDS以下是常见的平衡树/要用平衡树实现的算法:Treap(有旋/无旋)Splay树WBLT(WeightBalancedLeafyTree,重量平衡线段树)SBT(SizeBalancedTree,陈启峰树)AVL树B树、B+树笛卡尔树红黑树、左偏红黑树、AA树替罪羊树\(\to\)K-DTree(k-DimensionTree)LT(LeafyTree,平......
  • 111. 二叉树的最小深度
    目录题目完美踩坑题解题目给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。示例1:输入:root=[3,9,20,null,null,15,7]输出:2示例2:输入:root=[2,null,3,null,4,null,5,null,6]输出:5完美踩坑之前好几个题做过求树的高......
  • 数据结构--二叉树的生成和遍历(9)
    好久没有更新博客了,关于二叉树也查了不少资料,下面写上我对二叉树的理解。一、什么是二叉树二叉树是一种树形结构,其中每个节点的叶子节点不超过两个,而且二叉树的左右子树是有顺序的,顺序不能颠倒如下图所示,一下四种都属于二叉树。  二、特殊的二叉树1.满二叉树:听名......
  • 【JavaSE】数据结构(树:二叉查找树、平衡二叉树、AVL树、红黑树)
    树度:每个节点的子节点数量树高:树的总层数根节点:入度为0的节点二叉树每个节点最多有两个子节点二叉查找树任意节点左子树上的节点都小于当前节点,右子树上的节点都大于当前节点平衡二叉树任意节点的左右子树的高度差不超过1AVL树AVL树是一种平衡二叉树,得名于其发明者的......
  • 110. 平衡二叉树
    目录题目自顶向下自顶向下正解自底向上(优)题目给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。自顶向下首先,对当前节点进行处理,计算左孩子的高度,右孩子的高度,两者高度差若大......
  • 平衡树
    平衡树平衡树有好多种,边学边写吧~。目录序号类型1Treap2Splay3FHQTreap4红黑树5替罪羊树6LinkCutTree前置芝士二叉搜索树BST简介二叉搜索树是一种二叉树的树形数据结构,其定义如下:空树是二叉搜索树。若二叉搜索树的左子树不为空,则......
  • 多开工具对游戏平衡性与公平性的影响评估
    多开工具对游戏平衡性与公平性的影响评估摘要:随着网络游戏的普及,一些玩家开始使用多开工具来同时运行多个游戏账号。然而,这种行为引发了一系列讨论,涉及到游戏的平衡性和公平性问题。本文将评估多开工具对游戏平衡性与公平性的影响,并提出相应的观点。引言:多开工具是一种允许玩......