Java juge si un arbre binaire est un arbre binaire équilibré

Déterminer si un arbre binaire est un arbre binaire équilibré

description du sujet

Un arbre binaire équilibré en hauteur est défini comme suit : La valeur absolue de la différence de hauteur entre les sous-arbres gauche et droit de chaque nœud d'un arbre binaire ne dépasse pas 1.

exemple

insérez la description de l'image ici
insérez la description de l'image ici

insérez la description de l'image ici

Titre original lien JO

https://leetcode.cn/problems/balanced-binary-tree/

code de réponse

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
 import java.lang.Math;
class Solution {
    
    
    public boolean isBalanced(TreeNode root) {
    
    
        if(root == null){
    
    
            return true;
        }
        int leftH = getHeight(root.left);
        int rightH = getHeight(root.right);
        if((Math.abs(leftH-rightH)<=1) && isBalanced(root.left) && isBalanced(root.right)){
    
    
            return true;
        }
        return false;


    }
    public int getHeight(TreeNode root){
    
    //求树的深度(高度)
        if(root == null){
    
    
            return 0;
        }
        if(root.right == null && root.left == null){
    
    
            return 1;
        }
//        int count1 = getHeight(root.left)+1;
//        int count2 = getHeight(root.right)+1;
//        return Math.max(count1,count2);
        return Math.max(getHeight(root.left)+1, getHeight(root.right)+1);
    }
}

Un inconvénient de ce code est qu'il fait beaucoup de travail répétitif. En fait, il exécute une récursivité à double couche. Chaque nœud calcule la hauteur de ses sous-arbres gauche et droit. Si la valeur absolue de la différence non satisfaite est inférieure à ou égal à 1, il retournera faux. , mais en fait, ce travail peut être fait directement lors du calcul de la hauteur. Si la valeur absolue de la différence entre les hauteurs des sous-arbres gauche et droit est supérieure à 1, il sera directement return -1. La hauteur des nœuds suivants n'a pas du tout besoin d'être calculée, car cela montre que l'arbre doit être Il est déséquilibré.
Il y a donc le code suivant

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
 import java.lang.Math;
class Solution {
    
    
    public boolean isBalanced(TreeNode root) {
    
    
        return maxDepth(root)>=0;
    }
    public int maxDepth(TreeNode root){
    
    
        if(root == null){
    
    
            return 0;
        }
       int count1 = maxDepth(root.left);
       if(count1<0){
    
    
           return-1;
       } 
       int count2 = maxDepth(root.right);
       if(count2<0){
    
    
           return -1;
       }
       if(Math.abs(count1-count2)<=1){
    
    
           return Math.max(count1,count2)+1;
       }
       else{
    
    
           return -1;
       }
    }
}

Je suppose que tu aimes

Origine blog.csdn.net/baixian110/article/details/130943838
conseillé
Classement