zoukankan      html  css  js  c++  java
  • leetcode刷题笔记一百一十题 平衡二叉树

    leetcode刷题笔记一百一十题 平衡二叉树

    源地址:110. 平衡二叉树

    问题描述:

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

    本题中,一棵高度平衡二叉树定义为:

    一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。

    示例 1:

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

    3

    /
    9 20
    /
    15 7
    返回 true 。

    示例 2:

    给定二叉树 [1,2,2,3,3,null,null,4,4]

      1
     / 
    2   2
    

    /

    3 3
    /
    4 4
    返回 false 。

    /**
    本题可分为自顶向下或自底向上两种思路
    自顶向下的方法需要使用辅助函数计算当前结点的左右子树的高度,然后判断高度差是否小于2
    */
    /**
     * Definition for a binary tree node.
     * class TreeNode(var _value: Int) {
     *   var value: Int = _value
     *   var left: TreeNode = null
     *   var right: TreeNode = null
     * }
     */
    object Solution {
        def isBalanced(root: TreeNode): Boolean = {
            def helper(root: TreeNode): Int = {
                if (root == null) return 0
                else return 1 + Math.max(helper(root.left), helper(root.right))
            }
            if (root == null) return true
            if (Math.abs(helper(root.left) - helper(root.right)) < 2) return isBalanced(root.left) && isBalanced(root.right)
            return false
        }
    }
    
    /**
    由于自顶向下的方法含有子树高度的重复计算,使用自底向上能够有效的标记不符合平衡的子树为-1,整个向上过程中,如果出现-1直接返回
    */
    bject Solution {
        def isBalanced(root: TreeNode): Boolean = {
            def helper(root: TreeNode): Int = {
                if (root == null) return 0
                val leftTree = helper(root.left)
                if (leftTree == -1) return -1
                val rightTree = helper(root.right)
                if (rightTree == -1) return -1
                if (Math.abs(leftTree - rightTree) < 2) return Math.max(leftTree, rightTree)+1
                else return -1
            }
            if (root == null) return true
            return helper(root) != -1
        }
    }
    
  • 相关阅读:
    echart图表--雷达图表的动态数据max
    访问github个人博客时*.github.io 拒绝了我们的连接请求,错误码403
    js数组对象去重
    关于vuex的demo
    原生js实现 正方体旋转
    实现分页加载,加载更多(按钮类型),滚动加载的方式
    this指向
    记录三段式布局
    vue 动态路由 和 路由模式
    vue cli 配置反向代理
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/13446973.html
Copyright © 2011-2022 走看看