zoukankan      html  css  js  c++  java
  • 判断是否为平衡二叉树

    问题描述:

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

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

    一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过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。

    当二叉树中所有的节点都满足上述要求,则该树为平衡二叉树,否则不是。

    实现代码:

        // 全局变量记录是否为平衡二叉树的判断结果
        private static boolean res = true;
    
    
        // 计算高度
        private static int height(TreeNode node) {
    
            // res为false,已知该树不是BST,尽快返回
            // node为空,高度为0
            if (!res || node == null) return 0;
            // node左右均为空,返回高度1
            if (node.left==null && node.right==null) return 1;
    
            // 得到node左右子树的高度
            int left = height(node.left);
            int right = height(node.right);
            // 判断是否满足BST的要求
            if (left-right>1 || right-left>1) res = false;
    
            // node的高度为左右子树高度最大的那个加1(自身高度为1)
            return Math.max(left, right)+1;
        }
    
        public static boolean isBalanced(TreeNode root) {
            height(root);
            return res;
        }
  • 相关阅读:
    选择语句(if else) 习题(2017/12/1)
    Java代码空格问题
    设置背景图片
    寄存器
    8086微处理器的组成和工作原理
    8086引脚
    换行的训练
    彩票 双色球 36选7
    函数
    字符串
  • 原文地址:https://www.cnblogs.com/deltadeblog/p/9279529.html
Copyright © 2011-2022 走看看