zoukankan      html  css  js  c++  java
  • lintcode93- Balanced Binary Tree- easy

    Given a binary tree, determine if it is height-balanced.

    For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.

    Example

    Given binary tree A = {3,9,20,#,#,15,7}, B = {3,#,20,15,7}

    A)  3            B)    3 
       /                   
      9  20                 20
        /                  / 
       15   7              15  7
    

    The binary tree A is a height-balanced binary tree, but B is not.


    1. 分治+遍历,用全局变量。注意一下根据定义,空树null也是一颗平衡二叉树。

    /**
     * Definition of TreeNode:
     * public class TreeNode {
     *     public int val;
     *     public TreeNode left, right;
     *     public TreeNode(int val) {
     *         this.val = val;
     *         this.left = this.right = null;
     *     }
     * }
     */
    
    
    public class Solution {
        /*
         * @param root: The root of binary tree.
         * @return: True if this Binary tree is Balanced, or false.
         */
        
        private boolean isBalanceTree;
        
        public boolean isBalanced(TreeNode root) {
            // write your code here
            
            isBalanceTree = true;
            height(root);
            return isBalanceTree;
        }
        
        private int height(TreeNode root) {
            
            if (root == null) {
                return 0;
            }
            
            int leftHeight = height(root.left);
            int rightHeight = height(root.right);
            
            if (Math.abs(leftHeight - rightHeight) > 1) {
                isBalanceTree = false;
            }
            
            return Math.max(leftHeight, rightHeight) + 1;
        }
    }

    2.分治,不用全局变量用ResultType。

    /**
     * Definition of TreeNode:
     * public class TreeNode {
     *     public int val;
     *     public TreeNode left, right;
     *     public TreeNode(int val) {
     *         this.val = val;
     *         this.left = this.right = null;
     *     }
     * }
     */
    
    
    public class Solution {
        /*
         * @param root: The root of binary tree.
         * @return: True if this Binary tree is Balanced, or false.
         */
        
        private class ResultType{
            public int height;
            public boolean isBalanceTree;
            
            public ResultType(int height, boolean isBalanceTree) {
                this.height = height;
                this.isBalanceTree = isBalanceTree;
            }
        }
        
        public boolean isBalanced(TreeNode root) {
            // write your code here
            ResultType result = helper(root);
            return result.isBalanceTree;
        }
        
        private ResultType helper(TreeNode root) {
            
            ResultType result = new ResultType(0, true);
            
            if (root == null) {
                return result;
            }
            
            ResultType left = helper(root.left);
            ResultType right = helper(root.right);
            
            if (!left.isBalanceTree || !right.isBalanceTree ||
            Math.abs(left.height - right.height) > 1) {
                result.isBalanceTree = false;
            }
            result.height = Math.max(left.height, right.height) + 1;
            
            return result;
        }
    }
  • 相关阅读:
    linux查看日志文件内容命令tail、cat、tac、head、echo
    改变自己的128种方法,教你变得更优秀!
    php 23种设计模式
    Swoole消息推送
    PHP 出现 502 解决方案
    【centos7】添加开机启动服务/脚本
    curl 参数配置详解
    i系列标准-互联网周刊
    MySQL 设计与开发规范2
    Cocos Creator webviw网页置顶增加返回键的方法
  • 原文地址:https://www.cnblogs.com/jasminemzy/p/7639475.html
Copyright © 2011-2022 走看看