Puede hacer una función recursiva que encuentre el kth máximo en un árbol.
función kthmaximum (k, nodo) if (node.right.size () == k - 1) { // Esto significa que en este subárbol hay elementos k-1 más altos que la raíz // entonces el valor en la raíz es el que estamos buscando return node.value (); } if (node.right.size ()> = k) // Esto significa que el kth máximo está en el subárbol correcto, así que ve allí return kthmaximum (k, node.right) más { // Esto significa que el kth máximo está en el subárbol izquierdo // Necesitas restar de k el tamaño del subárbol correcto // si lo pruebas en papel verás que tiene sentido return kthmaximum (k - node.right.size () - 1, node.left); } }
El peor caso para este algoritmo es O (N) considerando el peor balance de árbol, sin embargo, si el árbol está equilibrado [1], entonces este algoritmo tiene una complejidad O (log N) por cada consulta.
[1] http://en.wikipedia.org/wiki/Sel…
- ¿Puedo solicitar un doctorado (CS) en UT Austin directamente después de mi licenciatura? ¿Cuánto me costará?
- ¿Cuáles son las ventajas y desventajas de la inteligencia artificial?
- ¿Cuáles son algunas arquitecturas informáticas generales viables y potencialmente útiles que no sean las de Von Neumann?
- Cuando reproduzco un disco de datos con un reproductor de CD de audio normal, ¿por qué no oigo nada?
- Cómo entender el tamaño correcto del búfer en el desarrollo