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 ofevery node never differ by more than 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:
        int maxRoot(TreeNode *root ){
          if(root == NULL) return 0;
          return max(1+maxRoot(root->left), 1 + maxRoot(root->right)) ;
        }
        bool test(TreeNode *root)
        {
           if(root == NULL) return true;
           if( abs(maxRoot(root->left) - maxRoot(root->right)) >1)
                return false;
            return test(root->left) &&test(root->right) ;
        }
        bool isBalanced(TreeNode *root) {
            // Start typing your C/C++ solution below
            // DO NOT write int main() function
            if(root == NULL) return true;
            return test(root) ;
        }
    };

     优化: 《剑指offer》上又一个优化的算法。使用后序遍历的方式,在遍历的过程中,计算每个节点的深度,并判断是否balanced

    /**
     * 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 test(TreeNode *root, int &depth){
            if(NULL == root){
                depth = 0;
                return true;
            }
            int leftD, rightD;
            bool testLeft = test(root->left ,leftD);
            bool testRight = test(root->right, rightD);
            depth  = leftD > rightD ? leftD+1 : rightD +1 ;
            
            if(testLeft && testRight){
                return  abs(leftD - rightD) < 2;
            }        
            return  false;
        }
        bool isBalanced(TreeNode *root) {
            // Start typing your C/C++ solution below
            // DO NOT write int main() function
            int depth;
            return test(root, depth);
        }
    };
    --------------------------------------------------------------------天道酬勤!
  • 相关阅读:
    POJ 1475 推箱
    POJ 2253 Frogger
    POJ 1970 The Game
    POJ 1979 Red and Black
    HDU 1546 Idiomatic Phrases Game 求助!help!!!
    Fibonacci 1
    BZOJ 1041
    椭圆曲线质因数分解
    奇怪的高精度
    数论v2
  • 原文地址:https://www.cnblogs.com/graph/p/3016433.html
Copyright © 2011-2022 走看看