首页 > 编程语言 >每日算法之判断是不是平衡二叉树

每日算法之判断是不是平衡二叉树

时间:2022-11-20 10:11:25浏览次数:37  
标签:right return int 每日 算法 二叉树 root left

JZ79 判断是不是平衡二叉树

描述

输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。
在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树
平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

思路

左右两个子树的高度差的绝对值不超过1
左右两个子树都是一棵平衡二叉树

代码

package esay.JZ79判断是不是平衡二叉树;

class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;
    public TreeNode(int val) {
        this.val = val;
    }
}

public class Solution {
    //自顶向下
    /*public boolean IsBalanced_Solution(TreeNode root) {
        //空树也是平衡二叉树
        if (root == null) return true;
        //左子树深度
        int left = deep(root.left);
        //右子树深度
        int right = deep(root.right);
        if (left - right > 1 || right - left > 1) return false;

        return IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right);
    }


    public int deep (TreeNode node) {
        if (node == null) return 0;
        //左遍历
        int left = deep(node.left);
        //右遍历
        int right = deep(node.right);
        return left > right ? left + 1 :right + 1;
    }*/

    //自底向上
    public boolean IsBalanced_Solution(TreeNode root) {
        if (root == null) return true;
        return getdepth(root) != -1;
    }


    public int getdepth (TreeNode node) {
        if (node == null) return 0;
        //左遍历
        int left = getdepth(node.left);
        if (left < 0) return -1;
        //右遍历
        int right = getdepth(node.right);
        if (right < 0) return -1;
        return Math.abs(left - right) > 1 ? -1 : Math.max(left, right) + 1;
    }


}

标签:right,return,int,每日,算法,二叉树,root,left
From: https://www.cnblogs.com/loongnuts/p/16907947.html

相关文章

  • 虚拟dom和diff算法
    虚拟dom和diff算法1.虚拟dom是一个能代表DOM树的对象,通常含有标签名,标签上的属性、事件监听和子元素们和子元素们的属性2.虚拟dom优点,能减少不必要的DOM操作,能跨平台渲染......
  • [排序算法] 堆排序 (C++)
    堆排序解释什么是堆堆heap是一种近似完全二叉树的数据结构,其满足一下两个性质1.堆中某个结点的值总是不大于(或不小于)其父结点的值;2.堆总是一棵完全二叉树将根......
  • 2022.47 AI中的算法与模型
    最近工作中,发现不少人对AI中的算法和模型的概念分不清楚,导致思考沟通表达问题不准确,其实这两个概念还是有很大差别的。AI中的算法,是指在已知样本数据基础上,按照预先设定的......
  • [排序算法] 树形选择排序 (C++)
    树形选择排序解释树形选择排序又称为锦标赛排序,其实理解起来很简单。......
  • 代码随想录算法训练营Day04|24. 两两交换链表中的节点、19. 删除链表的倒数第 N 个结
    代码随想录算法训练营Day04|24.两两交换链表中的节点、19.删除链表的倒数第N个结点、02.07.链表相交、142.环形链表II24.两两交换链表中的节点题目链接:24.两两交......
  • 实验四:神经网络算法实验
    【实验目的】理解神经网络原理,掌握神经网络前向推理和后向传播方法;掌握神经网络模型的编程实现方法。【实验内容】1.1981年生物学家格若根(W.Grogan)和维什(W.Wirth)发现......
  • T292113 [传智杯 #5 练习赛] 平等的交易 ----- 贪心算法、upper_bound()/lower_bound(
    题目描述你有 nn 件道具可以买,其中第 ii 件的价格为 a_iai​。你有 ww 元钱。你仅能用钱购买其中的一件商道具。当然,你可以拿你手中的道具换取其他的道具,只是这......
  • [排序算法] 希尔排序 (C++)
    前言本文章是建立在插入排序的基础上写的喔,如果有对插入排序还有不懂的童鞋,可以看看这里。❤❤❤直接/折半插入排序2路插入排序❤❤❤希尔排序解释希尔排序Shell......
  • 2022-11-19 Acwing每日一题
    本系列所有题目均为Acwing课的内容,发表博客既是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我......
  • 实验四:神经网络算法实验
    实验四:神经网络算法实验【实验目的】理解神经网络原理,掌握神经网络前向推理和后向传播方法;掌握神经网络模型的编程实现方法。【实验内容】1.1981年生物学家格若根(W.G......