Supongamos que sabemos que para el hijo izquierdo del nodo después de atravesar hacia abajo el mayor número de nodos de L (es decir, el hijo izquierdo de la raíz de la profundidad subárbol) del mismo y un hijo derecho es atravesada hacia abajo a través de la mayoría de los nodos R (es decir, para el hijo derecho la profundidad de la raíz del subárbol), entonces al nodo como el punto de partida de la ruta pasa a través de un número máximo de nodos es el L + R + 1
Observamos nodo nodo como el punto de partida de la ruta pasa a través de un número máximo de nodos es dnode, entonces el diámetro del árbol binario es el máximo de todos los nodos dnode menos uno.
El proceso algoritmo final: definimos una función de profundidad función recursiva (nodo) devuelve el nodo calcula dnode profundidad de la raíz del subárbol. llamada recursiva a la izquierda y derecha son son la profundidad L y RR son la raíz de subárbol determinada, la profundidad del nodo raíz del subárbol que es, max (L, R) 1; dnode valor del nodo es L + R + 1 busca de forma recursiva cada nodo y establece una variable global ans récord dnode más valor grande, y finalmente volver ans-1 es el diámetro del árbol.
Link: https: //leetcode-cn.com/problems/diameter-of-binary-tree/solution/er-cha-shu-de-zhi-jing-by-leetcode-solution/
1 / * * 2 * Definición de un nodo de árbol binario. 3 * struct TreeNode { 4 * int val; 5 * * NodoArbol la izquierda; 6 * * NodoArbol derecho; 7 * TreeNode (int x): val (x), a la izquierda (NULL), derecho (NULL) {} 8 *}; 9 * / 10 clase de soluciones { 11 pública : 12 int longitud = 0 ; 13 int diameterOfBinaryTree (TreeNode * raíz) { 14 profundidad (raíz); 15 de retorno longitud; 16 } 17 int profundidad (TreeNode * raíz) 18 { 19 int L = profundidad (Raíz> izquierda); 20 int R = profundidad (Raíz derecha); 21 Longitud = max (L + R, longitud); 22 de retorno max (L, R) + 1 ; 23 } 24 };