import java.util.*; /** * Classe di utility */ public class BinTreeUtil { /* * Stampa "graficamente" l'albero */ public static void print(BinTree tree) { print(tree, 0); } /* * Metodo ausiliario ricorsivo di print */ private static void print(BinTree t, int level) { for (int i = 0; i < level - 1; i++) { System.out.print(" "); } if (level > 0) System.out.print(" |--"); System.out.println(t.getRoot()); if (t.getLeftSubtree() != null) print(t.getLeftSubtree(), level+1); if (t.getRightSubtree() != null) print(t.getRightSubtree(), level+1); } /* * Stampa secondo la visita simmetrica */ public static void printInorder(BinTree t) { if (t.getLeftSubtree() != null) printInorder(t.getLeftSubtree()); System.out.print(t.getRoot() + " "); if (t.getRightSubtree() != null) printInorder(t.getRightSubtree()); } /* * Stampa per livelli */ public static void printLivelli(BinTree t) { LinkedList> l = new LinkedList>(); l.add(t); while (!l.isEmpty()) { BinTree v = l.remove(); System.out.print(v.getRoot()+" "); if (v.getLeftSubtree() != null) l.add(v.getLeftSubtree()); if (v.getRightSubtree() != null) l.add(v.getRightSubtree()); } System.out.println(); } /* * Stampa speculare */ public static void printMirror(BinTree tree) { printMirror(tree, 0); } /* * Metodo ausiliario ricorsivo di printMirror */ private static void printMirror(BinTree t, int level) { for (int i = 0; i < level - 1; i++) { System.out.print(" "); } if (level > 0) System.out.print(" |--"); System.out.println(t.getRoot()); if (t.getRightSubtree() != null) printMirror(t.getRightSubtree(), level+1); if (t.getLeftSubtree() != null) printMirror(t.getLeftSubtree(), level+1); } /* * Costruzione albero speculare */ public static BinTree mirror(BinTree t) { BinTree out = new BinTree(t.getRoot()); mirror(t, out); return out; } /* * Metodo ausiliario ricorsivo di mirror */ private static BinTree mirror(BinTree in, BinTree out) { BinTree left = in.getLeftSubtree(); BinTree right = in.getRightSubtree(); if(right != null) { BinTree leftMirror = out.addLeftChild(right.getRoot()); mirror(right, leftMirror); } if(left != null) { BinTree rightMirror = out.addRightChild(left.getRoot()); mirror(left, rightMirror); } return out; } }