package BinarySearchTree; /** * Clasa tree ce prezinta Arborele * @author Dan * */ public class Tree { public Node root; //radacina public Tree() { root = null; } /** * Metoda ce returneaza radacina * @return root Radacina */ public Node returnRoot() { return root; } /** * inserarea unui nod cu cheia id * @param id cheia */ public void insert(int id) { Node newNode = new Node(); newNode.item = id; if(root==null) //daca radacina e null atunci chaia devined radacina root = newNode; else { Node current = root; Node parent; while(true) { parent = current; if(id < current.item) { current = current.leftChild; if(current == null) { parent.leftChild = newNode; return; } } else { current = current.rightChild; if(current == null) { parent.rightChild = newNode; return; } } } } } /** * Traversarea in modota preordine rad;SAS;SAD * @param Root radacina Arborelui */ public void preOrder(Node Root) { if(Root != null) { System.out.print(Root.item + " "); preOrder(Root.leftChild); preOrder(Root.rightChild); } } /** * Traversarea in metoda inordine SAS;rad;SAD * @param Root radacina Arborelui */ public void inOrder(Node Root) { if(Root != null) { inOrder(Root.leftChild); System.out.print(Root.item + " "); inOrder(Root.rightChild); } } /** * Travesarea in metoda postordine SAS;SAD;rad * @param Root radacina Arborelui */ public void postOrder(Node Root) { if(Root != null) { postOrder(Root.leftChild); postOrder(Root.rightChild); System.out.print(Root.item + " "); } } /** * Afisarea Arborelui introdus in main */ public void displayTree() { Stack globalStack = new Stack(); //folosim stiva globala pentru a introduce nodurile in ea globalStack.push(root); int emptyLeaf = 32; boolean isRowEmpty = false; System.out.println("****......................................................****"); while(isRowEmpty==false) { Stack localStack = new Stack(); isRowEmpty = true; for(int j=0; j<emptyLeaf; j++) System.out.print(' '); //daca stiva globala este goala while(globalStack.isEmpty()==false) { Node temp = globalStack.pop(); if(temp != null) { System.out.print(temp.item); localStack.push(temp.leftChild); localStack.push(temp.rightChild); if(temp.leftChild != null ||temp.rightChild != null) isRowEmpty = false; } else { System.out.print("--"); //locurile goale na nivelul curent localStack.push(null); localStack.push(null); } for(int j=0; j<emptyLeaf*2-2; j++) System.out.print(' '); } System.out.println(); emptyLeaf /= 2; while(localStack.isEmpty()==false) globalStack.push( localStack.pop() ); } System.out.println("****......................................................****"); } }