título
Dado un árbol binario, es necesario calcular la longitud de su diámetro. Un árbol binario es la longitud máxima del diámetro de cualesquiera dos nodos en las longitudes de trayectoria. Esta ruta puede pasar a través de la raíz.
Ejemplos
Dado un árbol binario
1
/ \
2 3
/ \
4 5
Return 3, que es la longitud del camino [4,2,1,3] o [5,2,1,3].
nota:
Longitud de la trayectoria entre dos nodos está representado por el número de bordes entre los mismos.
pensamiento
Corresponde a la profundidad calculada árbol binario, para cada nodo, los subárboles izquierdo y derecho de la cálculo de la profundidad, por la profundidad de los subárboles izquierdo y derecho de compensación una longitud de trayectoria del nodo actual. A continuación, regrese nodo padre recuento del nodo actual a su profundidad.
código
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int diameterOfBinaryTree(TreeNode* root) {
if ( root == nullptr )
return 0;
int maxVal = 0;
helper( root, maxVal );
return maxVal;
}
int helper( TreeNode* root, int& maxVal ) {
if ( root == nullptr ) return 0;
int left = helper( root->left, maxVal );
int right = helper( root->right, maxVal );
int tempDiameter = right + left;
maxVal = max( maxVal, tempDiameter );
return max( left, right ) + 1;
}
};