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;
        }
    }
  • 相关阅读:
    前端工程师应该具备的三种思维
    7 个 Bootstrap 在线编辑器用于快速开发响应式网站
    js阻止浏览器的默认行为以及停止事件冒泡(用JQuery实现回车提交)
    JAVASCRIPT加密方法,JS加密解密综述(7种)
    JavaScript生成GUID的方法
    js判断是否为手机访问
    Jquery中parent()和parents()
    jQuery中ajax和post处理json的不同
    JQuery实现回车代替Tab键(按回车跳到下一栏)
    js中replace的用法
  • 原文地址:https://www.cnblogs.com/jasminemzy/p/7639475.html
Copyright © 2011-2022 走看看