• 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;
        }
    }
  • 相关阅读:
    阿里云ECS安全组之新手不得不面对的问题
    【云栖风向标】VOL.3:阿里云:对不起_这个官司我不服!
    Linux全自动安装wdcp面板脚本
    “程序员”和“码农”究竟有什么区别?
    安卓新标准出台_告别乱弹窗_你的手机真会省电么?
    16年程序员平均工资122478元_你拖后腿了没?
    6.5世界环境日!来聊聊那些你想不到的环保黑科技?
    小扎曝Facebook北极数据中心图片_最先进数据中心都建在哪?
    js之单例模式
    js 之 call 、 apply
  • 原文地址:https://www.cnblogs.com/jasminemzy/p/7639475.html
Copyright © 2020-2023  润新知