<>
título Descripción
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.
示例 :
给定二叉树
1 / \ 2 3 / \ 4 5
返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。
注意:两结点之间的路径长度是以它们之间边的数目表示。
Ideas de resolución de problemas
Mis pensamientos
Para dos nodos más largos de longitud de trayectoria, se requiere sólo el número de bordes en el lado izquierdo de cada punto + nodo derecha, el valor máximo para la iteración.
Simplemente es la más alejada de la izquierda a la ruta de extrema derecha es la distancia más larga.
Pero el problema tal existiría, cada nodo requiere un número de lados, habrá un gran número de operaciones repetitivas, ¿cuál es la solución?
# Definición de un nodo de árbol binario. # Clase TreeNode (objeto): # def __init __ (self, x): # self.val = x # self.left = Ninguno # self.right = Ninguna clase de soluciones (objeto): def diameterOfBinaryTree (auto, raíz): "" " : tipo raíz: TreeNode : RTYPE: int """ def capas (nodo): si no nodo: retorno 0 retorno 1+ Max (capas (node.left), las capas (node.right)) si noraíz: retorno 0 # capas de retorno (root.right) pila = [root] ret = -1 , mientras que len (pila): nodo = stack.pop () izquierda, derecha = 0,0 si node.left: izquierda = capas ( node.left) stack.append (node.left) si node.right: correctas = capas (node.right) stack.append (node.right) si izquierdo + derecho> ret: ret= Izquierda + derecha de retorno RET
resumen