diff --git a/Binary Tree/BinaryTree.java b/Binary Tree/BinaryTree.java new file mode 100644 index 0000000..286f6aa --- /dev/null +++ b/Binary Tree/BinaryTree.java @@ -0,0 +1,60 @@ +public class BinaryTree{ + + private static class Node { + + Item reg ; + Node left , right ; + } + + private Node root; + private long comparisons; + + public BinaryTree(){ + this.root = null; + this.comparisons = 0; + } + + public Item search (Item reg){ + return this.search(reg , this.root); + } + + public void insert(Item reg){ + this.root = this.insert(reg , this.root); + } + + public long getComparisons(){ + return this.comparisons; + } + //search for an Item and count how many comparisons were made. + private Item search(Item reg , Node p){ + this.comparisons++; + + if(p == null) + return null; + + else if(reg.compare(p.reg) < 0) + return search(reg , p.left); + + else if(reg.compare(p.reg) > 0) + return search(reg , p.right); + + else return p.reg; + } + + private Node insert(Item reg , Node p){ + if(p == null){ + p = new Node(); + p.reg = reg; + p.left = null; + p.right = null; + } + + else if(reg.compare(p.reg) < 0) + p.left = insert(reg, p.left); + else if(reg.compare(p.reg) > 0) + p.right = insert(reg , p.right); + else System.out.println("Error: This register already exists"); + + return p; + } +} \ No newline at end of file diff --git a/Binary Tree/Item.java b/Binary Tree/Item.java new file mode 100644 index 0000000..8afddc7 --- /dev/null +++ b/Binary Tree/Item.java @@ -0,0 +1,25 @@ +public class Item { + + private int key ; + + public Item ( int key ) { + this . key = key ; + } + + public int compare ( Item it ) { + + Item item = it ; + + if ( this . key < item . key ) + return -1; + + else if ( this . key > item . key ) + return 1; + + return 0; + } + + public int getKey () { + return key ; + } +} \ No newline at end of file diff --git a/Binary Tree/TestBinaryTree.java b/Binary Tree/TestBinaryTree.java new file mode 100644 index 0000000..0047e53 --- /dev/null +++ b/Binary Tree/TestBinaryTree.java @@ -0,0 +1,48 @@ + +import java.util.*; + +public class TestBinaryTree { + + public static void main(String[] args) { + + + //You can change the tree that will be used updating the value of variable num (0 to 8) + int num = 8; + + int N [] = {1000 , 2000 , 3000 , 4000 , 5000 , 6000 , 7000 , 8000 , 9000}; + + BinaryTree [] tree = new BinaryTree [9]; + + tree[num] = new BinaryTree(); + + //Experiment + ArrayList numbers = new ArrayList(); + //Fill arrayList sorted + for(int i = 0; i < N[num]; i++){ + numbers.add(i); + } + //With shuffle the numbers are randomized + Collections.shuffle(numbers); + for(int i = 0; i < N[num]; i++){ + Item it = new Item(numbers.get(i)); + tree[num].insert(it); + } + + + long initialTime = System.nanoTime(); + + Item search = new Item(9003); + tree[num].search(search); + System.out.println("Number of comparisons: "+ tree[num].getComparisons()); + + long finalTime = System.nanoTime(); + + + //Returns the current value of the system timer, in nanoseconds + System.out.print("Time in ns = "); + System.out.println(finalTime - initialTime); + + + } + +}