zoukankan      html  css  js  c++  java
  • LeetCode:平衡二叉树【110】

    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 。

    题目分析

      解法的整体过程为二叉树的后序遍历对任何一个节点node来说,先遍历node的左子树,遍历过程中收集两个信息,node的左子树是否为平衡二叉树,node的左子树最深处level。如果发现左子树不是平衡二叉树,无需进行任何后续过程,此时返回什么已经不重要,因为已经发现整棵树不是平衡二叉树,退出遍历过程

      如果node的右子树也是平衡二叉树,此时就看左右子树的level差的绝对值是否大于1,大于1说明不是平衡二叉树,如果不大于1,则返回较大的一个

    Java题解

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public boolean isBalanced(TreeNode root) {
            boolean[] res = new boolean[1];
            res[0] = true;
            getHeight(root,1,res);
            return res[0];
        }
        
        public int getHeight(TreeNode head,int level,boolean[] res)
        {
            if(head==null)
                return level;
            int lh = getHeight(head.left,level+1,res);
            if(!res[0])
                return level;
            int rh = getHeight(head.right,level+1,res);
            if(!res[0])
                return level;
            if(Math.abs(lh-rh)>1)
                res[0]=false;
            return Math.max(lh,rh);
        }
    }
    

      

  • 相关阅读:
    DIV+CSS中的滤镜和模糊
    初识DIV+CSS
    HTML核心标签之表格标签(二)
    HTML核心标签之表格标签(一)
    关于HTML的两个实例
    CSS的四种引入方式
    HTML中的表单
    HTML基础知识概括
    python3操作socketserver
    数据库MySQL的基本操作
  • 原文地址:https://www.cnblogs.com/MrSaver/p/9809124.html
Copyright © 2011-2022 走看看