Que ce soit équilibré arbre binaire?
Titre:
Étant donné un arbre binaire pour déterminer si elle est un arbre binaire très équilibré.
Dans ce problème, un arbre binaire équilibré est définie comme:
la valeur absolue de la différence entre la hauteur des sous - arbres gauche et droit d' un arbre binaire de chaque noeud ne dépasse pas 1.
Exemples:
Exemple 1:
un arbre binaire donné [3,9,20, null, null, 15,7 ]
3
/ \
9 20
/ \
15 7
Return true.
Exemple 2:
donnée arbre binaire [1,2,2,3,3, null, null, 4,4 ]
1
/ \
2 2
/ \
3 3
/ \
4 4
faux retour.
analyse du sujet
- Cible: chaque noeud de la différence de hauteur de la valeur absolue des sous - arbres gauche et droit si inférieur ou égal à 1
- Regarder sous-arbre gauche et à droite de la profondeur peut ⇒ récursive
- sous-arbre gauche est déterminé si la différence de profondeur pas plus de 1
analyse des idées
variable | effet |
---|---|
profondeur() | Résoudre le sous-arbre profondeur gauche et à droite |
Supposons que la profondeur de la couche inférieure jusqu'à la 0 une
profondeur ⇒ sous - arbres gauche et droit du noeud à une profondeur valeur supérieure plus 1
processus
- Si le nœud actuel est la différence de sous-arbres gauche et droite hauteur est supérieure à 1 ⇒ return false
- Déterminer si oui ou non le sous-arbres gauche et droit équilibré récursive arbre binaire ⇒
Code est la suivante
int depth(TreeNode*root)
{
if(!root) return 0;
return 1 + max(depth(root->left),depth(root->right));
}
class Solution {
public:
bool isBalanced(TreeNode* root) {
if(!root) return true;
if(abs(depth(root->left)-depth(root->right))>1) return false;
return isBalanced(root->left)&&isBalanced(root->right);
}
};