A: las ideas de resolución de problemas
Esta pregunta puede ser recursivos y métodos iterativos para resolver.
Dos: ejemplos de código completo (C ++ versión y la versión Java)
Recursión C ++:
clase de soluciones { público : int max ( int a, int b) { volver a> b? a: b; } Int maxDepth (TreeNode * raíz) { si (raíz == NULL) volver 0 ; retorno máx (maxDepth (Raíz> izquierda), maxDepth (Raíz> derecha)) + 1 ; } };
La recursividad de Java:
clase de soluciones { pública int maxDepth (raíz TreeNode) { si (raíz == nula ) de retorno 0 ; retorno Math.max (maxDepth (root.left), maxDepth (root.right)) + 1 ; } }
Métodos iterativos C ++:
// Tiempo: O (n), el espacio: O (n) la clase de soluciones { público : int maxDepth (TreeNode * raíz) { si (raíz == NULL) volver 0 ; cola <TreeNode *> cola; queue.push (raíz); int profundidad = 0 ; mientras que (! queue.empty ()) { int size = queue.size (); para ( int i = 0 ; i <tamaño; i ++ ) { TreeNode * t =queue.front (); queue.pop (); si (t> izquierda = NULL!) queue.push (t-> izquierda); si (t> derecha = NULL!) queue.push (t-> derecha); } Profundidad ++ ; } Devolver profundidad; } };
método iterativo de Java:
clase de soluciones { pública int maxDepth (raíz TreeNode) { si (raíz == nula ) de retorno 0 ; Queue <TreeNode> cola = nuevo LinkedList <> (); int profundidad = 0 ; queue.add (raíz); mientras que (! queue.isEmpty ()) { int size = queue.size (); para ( int i = 0 ; i <tamaño; i ++ ) { TreeNode t =queue.poll (); si (! t.left = nula ) queue.add (t.left); si (! t.right = nula ) queue.add (t.right); } Profundidad ++ ; } Devolver profundidad; } }