C ++ (lenguaje de programación): ¿Cómo puedo usar BST para encontrar el elemento mayoritario en una matriz sin clasificar?

Necesita crear un BST con un campo de conteo.
Para encontrar el elemento mayoritario, debe crear el BST utilizando elementos de matriz. Supongamos que la matriz es [3 2 2 2 4 2]
luego primero cree la raíz de BST con el valor 3 (cuenta = 1)
A continuación, agregue 2 como hijo izquierdo (con cuenta = 1)
Ahora intente agregar 2 nuevamente, pero vemos que ya hay un nodo con valor = 2, así que simplemente incremente la cuenta a 2.
Continuando de esta manera, se creará el siguiente árbol:
3 (1)
2 (4) 4 (1)

El valor entre paréntesis indica el recuento del valor.

Para verificar la mayoría, mientras crea el BST, verifique que el recuento del nodo actual sea> n / 2. Si es así, entonces es el elemento mayoritario.
Si la creación de BST se completa con todos los elementos de la matriz, significa que no se encontró ningún elemento mayoritario.
Para esta solución, la complejidad del tiempo es O (n log n) si se crea un BST equilibrado, donde n – número de elementos en la matriz, y la complejidad del espacio es O (n) porque estamos usando espacio adicional para crear el BST.
Espero que esta explicación ayude.

Puede ver métodos más eficientes y fáciles de entender para resolver este problema en este video:

La clave aquí es tener una estructura personalizada para el nodo del BST.

árbol de estructura
{
elemento int;
int cuenta;
estructura de árbol * izquierda;
estructura de árbol * derecha;
}nodo;

Ahora, cada vez que inserte un elemento, atravesará el árbol. Si encuentra el elemento, incrementa el recuento; de lo contrario, agregue un nodo con el recuento como 1.
Básicamente es lo mismo que mantener una lista separada de conteo pero usar un BST.

Ex. 2,3,4,4,4,3,1,5,4

BST sería

(2,1)
(1,1) (3,2)
(4,4)
(5,1)
Ahora puede atravesar el árbol al final para encontrar el elemento con el conteo más alto o insertarlo para mantener un seguimiento de él.

Déjeme saber si esto ayuda.

More Interesting

¿Qué tipo de preguntas puede esperar que le hagan en Hacker-x? Sé que es como una cita rápida en la que obtienes 5 minutos con cada compañía, pero me gustaría saberlo.

Para las entrevistas en el campus, ¿por qué las empresas realizan entrevistas de codificación en línea en HackerRank o CodeChef?

Cómo ordenar una matriz hasta una posición específica

¿Cuáles son las buenas preguntas de la entrevista técnica de Google?

¿Por qué este código no funciona para reemplazar una parte de una cadena con otra cadena en C?

¿Es un factor decisivo que, durante mis entrevistas en Google, cuando terminé de resolver un problema, el tiempo casi había terminado y el entrevistador no podía hacerme una segunda pregunta?

Cómo abordar sistemáticamente los problemas de retroceso

¿Cuáles son las preguntas de diseño que se hacen en las entrevistas de SDE en compañías tecnológicas en los Estados Unidos?

¿Diseñar una arquitectura de servidor para servir imágenes de mapas de Google?

¿Qué dicen las soluciones subóptimas sobre usted en una entrevista de software técnico?

Si menciona en su currículum que tiene un nivel principiante de competencia en un lenguaje de programación en particular, ¿cuánto se espera que sepa?

¿Qué tipo de preguntas se hacen durante las entrevistas de codeNation? ¿Son principalmente del tipo que se solicitan en Codechef (es decir, la codificación matemática) o lo hacen desde un enfoque de estructura de datos?

Como programador competitivo, ¿cuál debería ser su enfoque cuando un entrevistador hace una pregunta fácil / moderada que puede resolver fácilmente?

Se nos da una serie ordenada de números reales. ¿Qué es una secuencia aritmética que minimiza el error cuadrático medio con respecto a la matriz?

¿Cómo es una típica entrevista de ingeniería de software con usted?