Advertisement
gewur33

Untitled

Nov 10th, 2014
530
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.00 KB | None | 0 0
  1.  
  2.  
  3. public class BinaryTree {
  4.  
  5.     BinaryNode root;
  6.  
  7.     public void addNode(int value, int pos) {
  8.  
  9.         // Create a new Node and initialize it
  10.  
  11.         BinaryNode newNode = new BinaryNode(value, pos);
  12.  
  13.         // If there is no root this becomes root
  14.  
  15.         if (root == null) {
  16.  
  17.             root = newNode;
  18.  
  19.         } else {
  20.  
  21.             // Set root as the Node we will start
  22.             // with as we traverse the tree
  23.  
  24.             BinaryNode focusNode = root;
  25.  
  26.             // Future parent for our new Node
  27.  
  28.             BinaryNode parent;
  29.  
  30.             while (true) {
  31.  
  32.                 // root is the top parent so we start
  33.                 // there
  34.  
  35.                 parent = focusNode;
  36.  
  37.                 // Check if the new node should go on
  38.                 // the left side of the parent node
  39.  
  40.                 if (pos < focusNode.getPos()) {
  41.  
  42.                     // Switch focus to the left child
  43.  
  44.                     focusNode = focusNode.getLeft();
  45.  
  46.                     // If the left child has no children
  47.  
  48.                     if (focusNode == null) {
  49.  
  50.                         // then place the new node on the left of it
  51.  
  52.                         parent.setLeft(newNode);
  53.                         return; // All Done
  54.  
  55.                     }
  56.  
  57.                 } else { // If we get here put the node on the right
  58.  
  59.                     focusNode = focusNode.getRight();
  60.  
  61.                     // If the right child has no children
  62.  
  63.                     if (focusNode == null) {
  64.  
  65.                         // then place the new node on the right of it
  66.  
  67.                         parent.setRight(newNode);
  68.                         return; // All Done
  69.  
  70.                     }
  71.  
  72.                 }
  73.  
  74.             }
  75.         }
  76.  
  77.     }
  78.  
  79.     // All nodes are visited in ascending order
  80.     // Recursion is used to go to one node and
  81.     // then go to its child nodes and so forth
  82.  
  83.     public void inOrderTraverseTree(BinaryNode focusNode) {
  84.  
  85.         if (focusNode != null) {
  86.  
  87.             // Traverse the left node
  88.  
  89.             inOrderTraverseTree(focusNode.getLeft());
  90.  
  91.             // Visit the currently focused on node
  92.  
  93.             System.out.println(focusNode.toString());
  94.  
  95.             // Traverse the right node
  96.  
  97.             inOrderTraverseTree(focusNode.getRight());
  98.  
  99.         }
  100.  
  101.     }
  102.  
  103.     public void preorderTraverseTree(BinaryNode focusNode) {
  104.  
  105.         if (focusNode != null) {
  106.  
  107.             System.out.println(focusNode.toString());
  108.  
  109.             preorderTraverseTree(focusNode.getLeft());
  110.             preorderTraverseTree(focusNode.getRight());
  111.  
  112.         }
  113.  
  114.     }
  115.  
  116.     public void postOrderTraverseTree(BinaryNode focusNode) {
  117.  
  118.         if (focusNode != null) {
  119.  
  120.             postOrderTraverseTree(focusNode.getLeft());
  121.             postOrderTraverseTree(focusNode.getRight());
  122.  
  123.             System.out.println(focusNode.toString());
  124.  
  125.         }
  126.  
  127.     }
  128.  
  129.     public BinaryNode findNode(int pos) {
  130.  
  131.         // Start at the top of the tree
  132.  
  133.         BinaryNode focusNode = root;
  134.  
  135.         // While we haven't found the Node
  136.         // keep looking
  137.  
  138.         while (focusNode.getPos() != pos) {
  139.  
  140.             // If we should search to the left
  141.  
  142.             if (pos < focusNode.getPos()) {
  143.  
  144.                 // Shift the focus Node to the left child
  145.  
  146.                 focusNode = focusNode.getLeft();
  147.  
  148.             } else {
  149.  
  150.                 // Shift the focus Node to the right child
  151.  
  152.                 focusNode = focusNode.getRight();
  153.  
  154.             }
  155.  
  156.             // The node wasn't found
  157.  
  158.             if (focusNode == null)
  159.                 return null;
  160.  
  161.         }
  162.  
  163.         return focusNode;
  164.  
  165.     }
  166.  
  167.     public BinaryNode getRoot() {
  168.         return root;
  169.     }
  170.  
  171.     public void setRoot(BinaryNode root) {
  172.         this.root = root;
  173.     }
  174. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement