domingo, 15 de junio de 2008

Java BinaryTree. part V

When we want to visit all Binarytree's nodes, we need an aditional structure. I have decided to use a list, but can be used others like the set.

Why do we need it? The iterator is a lineal path over a structure whoes returns the next object, but the Binarytree has a special morphology wich allow us cross throw the nodes by three differents paths.

InOrder:

When we visit a node, we process him, our idea is add it to the list. The method is recursive, we call the own function to visit the full tree.

Sourcecode:

private void recorrerInOrden(BinaryTree t,List l){
if ((t==null)||(l==null))
throw new NullPointerException ("No hay arbol que recorrer, o no se puede guardar el recorrido");
//Llamada recursiva hasta que el arbol este vacio para hacer un tratamiento
inOrden
if (!t.isEmpty()){
recorrerInOrden(t.left(),l);
l.add(t.getRoot());
recorrerInOrden(t.right(),l);
}
}

PreOrder:

Sourcecode:

private void recorrerPreOrden(BinaryTree t, List l){
if ((t==null)||(l==null))
throw new NullPointerException ("No hay arbol que recorrer, o no se puede guardar el recorrido");
// Llamada recursiva hasta que el arbol este vacio para hacer un tratamiento PreOrden
if (!t.isEmpty()){
l.add(t.getRoot());
recorrerPreOrden(t.left(),l);
recorrerPreOrden(t.right(),l);
}
}

PostOrder: Sourcecode:
private void recorrerPosOrden(BinaryTree t,
List l){
if ((t==null)||(l==null))
throw new NullPointerException ("No hay arbol que recorrer, o no se puede guardar el recorrido");
// Llamada recursiva hasta que el arbol este vacio para haver un tratamiento PosOrden
if (!t.isEmpty()){
recorrerPosOrden(t.left(),l);
recorrerPosOrden(t.right(),l);
l.add(t.getRoot());
}
}

No hay comentarios: