zoukankan      html  css  js  c++  java
  • [LeetCode] Balanced Binary Tree

    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.

    Hide Tags
     Tree Depth-first Search
     
    思路:平衡二叉树就是和数的高度有关系,例外,如果有不是平衡二叉树的子树,那么返回-1,表示其不是平衡二叉树
    /**
     * Definition for binary tree
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
        public:
            bool isBalanced(TreeNode *root)
            {   
                if(root == NULL)
                    return true;
                return treeHeight(root ) >= 0;
            }   
    
            int treeHeight(TreeNode * root)
            {   
                if(root == NULL)
                    return 0;
                int lHeight = treeHeight(root->left); 
                int rHeight = treeHeight(root->right); 
                if(lHeight < 0 || rHeight < 0)
                    return -1; 
                if( abs(lHeight - rHeight) <= 1)
                    return max(lHeight, rHeight) + 1;
                return -1; 
            }   
    };
    class Solution {
    public:
        bool checkBalance(TreeNode *node, int &dep)
        {
            if (node == NULL)
            {
                dep = 0;
                return true;
            }
            
            int leftDep, rightDep;
            bool leftBalance = checkBalance(node->left, leftDep);
            bool rightBalance = checkBalance(node->right, rightDep);
            
            dep = max(leftDep, rightDep)+1;
            
            return leftBalance && rightBalance && (abs(rightDep - leftDep) <= 1);
        }
        
        bool isBalanced(TreeNode *root) {
            // Start typing your C/C++ solution below
            // DO NOT write int main() function
            int dep;
            return checkBalance(root, dep);
        }
    };
     
  • 相关阅读:
    HDU.6681.Rikka with Cake(欧拉公式 树状数组)
    Codeforces.449C.Willem, Chtholly and Seniorious(ODT)
    2017-2018 ACM-ICPC, Asia Daejeon Regional Contest (E,G,H,I,K)
    CF GYM.101987A.Circuits(线段树)
    2018-2019 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2018)
    220
    219
    218
    217
    216
  • 原文地址:https://www.cnblogs.com/diegodu/p/4410136.html
Copyright © 2011-2022 走看看