memory - java: Building a Tri-nary tree and my nodes won't be deleted -


building tribunary tree in java , delete functionality doesn't seem working. can me understand why won't delete variable node?

node = null; 

my code, compile , run:

import java.util.hashmap; import java.util.iterator; import java.util.map; import java.util.set;  public class tritree {  public static void main(string[] args) { new tritree().run(); }  static class trinode { trinode left; trinode middle; trinode right;  int value;  public trinode(int value) { this.value = value; } }  private map<integer,string> tritreelevels=new hashmap<integer, string>();  public void run() { // build simple tree chapter 11. trinode root = new trinode(50); system.out.println("binary tree example"); system.out.println("building tree root value " + root.value); insert(root, 25); insert(root, 30); insert(root, 10); insert(root, 100); insert(root, 190); insert(root, 80); insert(root, 89); insert(root, 75); insert(root, 150); insert(root, 200); insert(root, 125); insert(root, 175); insert(root, 999); deletenode(root, 999);  system.out.println("traversing tree in order"); printbyorder(root); j system.out.println("tree levels"); printbyorder(root); printbytreelevels(root);  deletenode(root, 100); system.out.println("deleting 100"); system.out.println("tree levels"); printbytreelevels(root);  deletenode(root, 10); system.out.println("deleting 10"); system.out.println("tree levels"); printbytreelevels(root);  deletenode(root, 200); system.out.println("deleting 200"); system.out.println("tree levels"); printbytreelevels(root);  }  public void insert(trinode node, int value) { if (value < node.value) { if (node.left != null) { insert(node.left, value); } else { system.out.println("  inserted " + value + " left of " + node.value); node.left = new trinode(value); } } else if (value == node.value) { if(node.middle != null){ insert(node.middle, value); }else{ system.out.println("  inserted " + value + " middle of " + node.value); node.middle = new trinode(value); } } else if (value > node.value) { if (node.right != null) { insert(node.right, value); } else { system.out.println("  inserted " + value + " right of " + node.value); node.right = new trinode(value); } } }  public void printbyorder(trinode node) { //prints existing node , calls print on children if (node != null) { printbyorder(node.left);  if(node.middle != null){ printbyorder(node.middle); }  system.out.println("  traversed " + node.value); printbyorder(node.right); } }  public void printbytreelevels(trinode node){ //clear tritreelevels previous fills tritreelevels.clear(); loadtreelevels(node, 0); displaytreelevels(); }  public void loadtreelevels(trinode node, int level) { //add current node specified level. if(tritreelevels.get(level) != null) tritreelevels.put(level, tritreelevels.get(level) + node.value + " "); else tritreelevels.put(level, node.value + " ");  //this next section loads existing children nodes in next level if(node.left != null) loadtreelevels(node.left, level+1);  if(node.middle != null) loadtreelevels(node.middle, level+1);  if(node.right != null) loadtreelevels(node.right, level+1); }  public void displaytreelevels() { //incremently print levels of tree for(int = 0; <  tritreelevels.size(); i++){ system.out.println(i+": "+tritreelevels.get(i)); } }  public void deletenode(trinode node, int value) { if(node.value < value){ deletenode(node.right, value); }else if(node.value > value){ deletenode(node.left, value); }else{ if(node.left == null && node.middle == null && node.right == null){ //node leaf, safe remove node = null; }else if(node.middle != null){ //node contains duplicate used it's spare node = node.middle; }else if(node.left != null && node.right == null){ //node contains left, it's removed being replaced left node node = node.left; }else if(node.left == null &&  node.middle == null && node.right != null){ //node contains right, it's removed being replaced right node node = node.right; }else{ //at point lose complexity of 3 children. if deleted node had duplicate have been replaced. if(node.right.left == null){ //right node doesn't have left child  //right node inherits left node left child node.right.left = node.left; //and replaces current 1 node = node.right; }else{ trinode replacementnode; trinode parentoflowestnode = node.right;  //keep traversing until find lowest value on left side while(parentoflowestnode.left.left != null) parentoflowestnode = parentoflowestnode.left;  //replacement node lowest value replacementnode = parentoflowestnode.left;  //lowest value node way left //it replaced it's right child if has 1 parentoflowestnode.left = replacementnode.right;  //finish building replacement node supplying it's left , right children of node deleted replacementnode.left = node.left; replacementnode.right = node.right;  //replace node deleted node = replacementnode; } } } }  } 

node = null sets reference node null. it's not deleting node in tree. delete node in tree, must set left, middle, or right variable of parent node null.

node local, temporary variable used method deletenode() reference node want deleted.


Comments

Popular posts from this blog

c# - How to set Z index when using WPF DrawingContext? -

razor - Is this a bug in WebMatrix PageData? -

visual c++ - Using relative values in array sorting ( asm ) -