Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Equipo 4
Arboles
• Los Árboles se caracterizan por almacenar sus nodos en
forma jerárquica y no en forma lineal como las Listas
Ligadas, Colas,Pilas,etc.,.
Estructura arboles
• Nodos: Se le llama Nodo a cada elemento que contiene un Árbol.
• Nodo Raíz: Se refiere al primer nodo de un Árbol, Solo un nodo del Árbol
puede ser la Raíz.
• Nodo Padre: Se utiliza este termino para llamar a todos aquellos nodos que
tiene al menos un hijo.
• Nodo Hijo: Los hijos son todos aquellos nodos que tiene un padre.
• Nodo Hermano: Los nodos hermanos son aquellos nodos que comparte a
un mismo padre en común dentro de la estructura.
• Nodo Hoja: Son todos aquellos nodos que no tienen hijos, los cuales
siempre encuentran en los extremos de la estructura.
• Nodo Rama: Estos son todos aquellos nodos que no son la raíz y que
ademas tiene al menos un hijo.
• Nivel: Nos referimos como nivel a cada generación dentro del árbol. Por
ejemplo, cuando a un nodo hoja le agregamos un hijo, el nodo hoja
pasa a ser un nodo rama pero a demás el árbol crece una generación
por lo que el Árbol tiene un nivel mas. Cada generación tiene un
número de Nivel distinto que las demás generaciones.
• Un árbol vacío tiene 0 niveles
• El nivel de la Raíz es 1
• Grado: El grado se refiere al número mayor de hijos que tiene alguno de los
nodos del Árbol y esta limitado por el Orden, ya que este indica el
número máximo de hijos que puede tener un nodo.
• El grado se calcula contando de forma recursiva el número de hijos de cada
sub-árbol hijo y el numero de hijos del nodo actual para tomar el mayor, esta
operación se hace de forma recursiva para recorrer todo el árbol.
• grado = max(contarHijos(hijo1),contarHijos(hijo2), contarHijos(hijoN),
contarHijos(this))
• Sub-Árbol: Conocemos como Sub-Árbol a todo Árbol generado a partir de
una sección determinada del Árbol, Por lo que podemos decir que un
Árbol es un nodo Raíz con N Sub-Árboles.
• La profundidad de la raíz es 0
• La profundidad de un nodo es igual a la profundidad de su padre + 1
Recorrido de Árboles
• Preorden: Se pasa por la raíz y luego se recorre en preorden cada uno de
los subárboles. Recursivo.
• Postorden: Se recorre en postorden cada uno de los subárboles y luego se
pasa por la raíz. Recursivo.
• Inorden: Se recorre en inorden el primer subárbol (si existe). Se pasa por
la raíz y por último se recorre en inorden cada uno de los subárboles
restantes. Tiene sentido fundamentalmente en árboles binarios.
Recursivo.
• Por Niveles: Se etiquetan los nodos según su profundidad (nivel). Se
recorren ordenados de menor a mayor nivel, a igualdad de nivel se
recorren de izquierda a derecha.No recursivo: Se introduce el raíz en una
cola y se entra en un bucle en el que se extrae de la cola un nodo, se
recorre su elemento y se insertan sus hijos en la cola.
Grafos
• consiste en un conjunto de nodos (también llamados
vértices) y un conjunto de arcos (aristas) que establecen
relaciones entre los nodos.
• La teoría de grafos nació con la finalidad de representar de
forma visual conjuntos abstractos de datos que se encuentran
en el mundo real para ser útiles en soluciones de problemas
de complejidad.
• Ha contribuido inclusive a la creación de una nueva forma de ver el
mundo. Ahora podemos comprender el mundo de los datos con imágenes.
• Decimos que dos nodos están conectados si podemos ir de uno a otro a
través de arcos:
• Grafo dirigido: Grafo en el que los arcos tienen sentido. Si los arcos no
tienen sentido hablamos de un grafo no dirigido
int main() {
int n, m;
cin >> n >> m;
int main() {
int n, m;
cin >> n >> m;
vector <vector <int> > G(n, vector <int>(n, -1));
G[x][y] = G[y][x] = w;
}
}
• Como lista de adyacencia. Guardaremos una lista G[N], donde
cada entrada G[v] será una lista de los nodos adyacentes a v.
En C++, podemos representarlo como vector<vector<int> > G.
En caso de tener pesos, habrá que guardar también el peso de
la arista, usando por ejemplo pair<int, int>.
using namespace std;
int main() {
int n, m;
cin >> n >> m;
G[x].push_back(y);
G[y].push_back(x);
W[x].push_back(w);
W[y].push_back(w);
}
}
Conclusion
• Los arboles y grafos son conceptos muy importantes en la
programación y en otras áreas ya que hace que visualices y te
des idea de la estructura de numeros,codigo,etc..