• Balanced Binary Tree


    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.

    C++版本1:

    #include <iostream>
    #include <vector>
    #include <stdlib.h>
    
    using namespace std;
    struct TreeNode{
        int val;
        TreeNode *left;
        TreeNode *right;
        TreeNode(int x):val(x),right(NULL),left(NULL){}
    };
    
    class Solution{
    private:
        bool balanced=true;
        int height(TreeNode *root){
          if(!balanced){
            return -1;
          }
          if(root==NULL){
            return 0;
          }
          int leftH,rightH;
          leftH=height(root->left)+1;
          rightH=height(root->right)+1;
          if(abs(leftH-rightH)>1){
            balanced=false;
          }
          return leftH>rightH?leftH:rightH;
        }
        bool isBalanced(TreeNode *root){
            balanced=true;
            height(root);
            return balanced;
        }
    };
    
    int main()
    {
        cout << "Hello world!" << endl;
        return 0;
    }
    

      c++版本2:

    /**
     * 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 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);
        }
    };
    

      Java版本:

    /**
     * Definition for binary tree
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
       public boolean isBalanced(TreeNode root) {
    		if (root == null)
    			return true;
     
    		if (getHeight(root) == -1)
    			return false;
     
    		return true;
    	}
     
    	public int getHeight(TreeNode root) {
    		if (root == null)
    			return 0;
     
    		int left = getHeight(root.left);
    		int right = getHeight(root.right);
     
    		if (left == -1 || right == -1)
    			return -1;
     
    		if (Math.abs(left - right) > 1) {
    			return -1;
    		}
     
    		return Math.max(left, right) + 1;
     
    	}
    }
    

      

  • 相关阅读:
    求子数组最大和
    layout_weight layout_width = 0dp
    一些日历的实现
    只显示年月日的日历
    每日学习之0512
    git 出现The current branch is not configured for pull No value for key branch.master.merge found in configuration错误的解决办法
    git的配置
    使用Spring security框架实现登陆页面时跳转到favicon.ico问题
    播放视频(c#)
    太阳沉落了
  • 原文地址:https://www.cnblogs.com/zlz-ling/p/4042600.html
Copyright © 2020-2023  润新知