Java juzga si un árbol binario es un árbol binario equilibrado

Determinar si un árbol binario es un árbol binario balanceado

Tema Descripción

Un árbol binario de altura equilibrada se define como: El valor absoluto de la diferencia de altura entre los subárboles izquierdo y derecho de cada nodo de un árbol binario no supera 1.

ejemplo

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

Título original DO enlace

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

código de respuesta

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

Una desventaja de este código es que en realidad hace mucho trabajo repetitivo. De hecho, está realizando una recursión de doble capa. Cada nodo calcula la altura de sus subárboles izquierdo y derecho. Si el valor absoluto de la diferencia insatisfecha es menor que o igual a 1, devolverá falso. , pero de hecho, este trabajo se puede hacer directamente al calcular la altura. Si el valor absoluto de la diferencia entre las alturas de los subárboles izquierdo y derecho es mayor que 1, será directamente devuelve - 1. La altura de los nodos posteriores no necesita calcularse en absoluto, porque esto muestra que el árbol debe estar desequilibrado.
Así que hay el siguiente código

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

Supongo que te gusta

Origin blog.csdn.net/baixian110/article/details/130943838
Recomendado
Clasificación