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);
        }
    };
    --------------------------------------------------------------------天道酬勤!
  • 相关阅读:
    AxAssist MS Dynamics AX Development Tool
    Using x++ code calculate the personal tax of salary
    35岁前务必成功的12级跳(转)
    Window:下载并安装FileZilla客户端
    Windows本地文件上传到Linux服务器(腾讯云)
    Linux:服务器(CentOS)搭建FTP服务
    Window下载并安装WinSCP客户端
    Docker之镜像原理
    深入剖析RocketMQ 之消息存储模块
    谈谈Redis分布式锁安全性
  • 原文地址:https://www.cnblogs.com/graph/p/3016433.html
Copyright © 2011-2022 走看看