Package mit. bintree;/** Binary Tree node class */public class node <t> {/* node value */Public t data; /* reference the left subnode */Public node <t> left = NULL;/* reference the right subnode */Public node <t> right = NULL; /* parent node reference */Public node <t> parent = NULL; node () {} node (t data) {This. data = data;} node (t data, node <t> parent, node <t> left, node <t> right) {This. data = data; this. parent = parent; this. left = left; this. right = right;}/* connection node, mainly to point its child node to the parent node */ Public Boolean joinnode (node <t> B, Boolean isleft) {If (isleft & this. Left! = NULL) {return false;} else if (! Isleft & this. Right! = NULL) {return false;} If (isleft) {This. left = B;} else {This. right = B;} B. parent = This; return true;} @ override Public String tostring () {return data. tostring ();}/* traverse the current node and Its subnodes: In-order traversal */public static <t> void display (node <t> node) {If (node! = NULL) {display (node. left); system. out. print (node. data + "\ t"); display (node. right) ;}} public static void main (string [] ARGs) {node <integer> root = new node <integer> (0 ); node <integer> LC1 = new node <integer> (1, root, null, null); node <integer> LR1 = new node <integer> (2, root, null, null); root. joinnode (LC1, true); root. joinnode (LR1, false); system. out. println (Root); system. out. println (lc1.parent); system. out. println ("show .... "); display (Root); system. out. println ();}}
Package MIT. bintree; import java. util. comparator;/*** binary tree. Including insert, delete, and traverse ** @ Author: Lee * @ Date: 2013/6/13 */public class bintree <t> {private node <t> root; Private Comparator <t> comp; bintree (comparator <t> comp) {root = new node <t> (); this. comp = comp;} bintree (t data, comparator <t> comp) {root = new node <t> (data); this. comp = comp;} bintree (t data, node <t> left, node <t> right, comparator <t> comp) {root = new node <t> (data, null, left, right); this. comp = comp;}/** Section Point Insertion; */Public Boolean insert (node <t> node) {If (node. data = NULL) {Throw new illegalargumentexception ("");} If (root = NULL) {root = node; return true;} node <t> principal = root; node <t> parent; while (true) {parent = cursor; If (Comp. compare (tables. data, node. data)> = 0) {bytes = bytes. left; If (response = NULL) {return parent. joinnode (node, true) ;}} else {worker = worker. right; If (condition = NULL) {return Paren T. joinnode (node, false) ;}}} public Boolean insert (t data) {node <t> node = new node <t> (data ); return insert (node);}/** delete node */Public Boolean Delete (node <t> node) {If (root = NULL) {Throw new illegalargumentexception ("no data in tree");} If (node = NULL | node. data = NULL) {Throw new illegalargumentexception ("delete node cannot be null");} node <t> current = root; Boolean isleft = true; while (true) {If (Comp. compare (current. Data, node. data)> 0) {current = current. left; isleft = true; If (current = NULL) {return false; // returns false if (Comp. compare (current. data, node. data) <0) {current = current. right; isleft = false; If (current = NULL) {return false ;}} else {/* Find the corresponding value * // There are three conditions: node <t> parent = current. parent; If (current. left = NULL & current. right = NULL) {If (parent = NULL) {// root = NULL when only the root node exists; Current = NULL; return true;} If (isleft) {parent. left = NULL; current = NULL;} else {parent. right = NULL; current = NULL;} else if (current. left = NULL & current. right! = NULL) {If (isleft) {parent. left = current. right; current. right. parent = parent; current = NULL;} else {parent. right = current. right; current. right. parent = parent; current = NULL;} else if (current. left! = NULL & current. right = NULL) {If (isleft) {parent. left = current. left; current. left. parent = parent; current = NULL;} else {parent. right = current. left; current. right. parent = parent; current = NULL ;}} else {/* traverses the maximum node of the Left subtree or the smallest node of the right subtree justu to replace the current node, then delete justu */node <t> cright = current. right; // right subtree scheme if (cright. left! = NULL) {While (cright. Left. Left! = NULL) {// traverse the left subtree and find the smallest node justucright = cright. left;} current. data = cright. left. data; // Replace the current node // consider cright. whether left has the right subnode. If (cright. Left. Right! = NULL) {cright. left = cright. left. right;} cright. left = NULL;} else {// The current left subtree has only one node, current. data = cright. data; current. right = cright. right; cright = NULL ;}} return true ;}} public Boolean Delete (t data) {node <t> node = new node <t> (data ); return Delete (node);} public void display () {node. display (Root);} public static void main (string [] ARGs) {comparator <integer> comp = new comparator <integer> () {@ overridepublic int compare (integer O1, integer O2) {If (O1> O2) {return 1;} else if (O1 <O2) {return-1 ;}else {return 0 ;}}}; bintree <integer> btree = new bintree <integer> (10, comp); node <integer> n1 = new node <integer> (9 ); node <integer> n2 = new node <integer> (2); node <integer> N3 = new node <integer> (2 ); node <integer> N4 = new node <integer> (11); node <integer> N5 = new node <integer> (90 ); node <integer> N6 = new node <integer> (10); Boolean res; btree. insert (N1); btree. insert (N2); btree. insert (N3); btree. insert (n4); btree. insert (N5); btree. insert (N6); btree. insert (32); btree. insert (100); btree. insert (-1); system. out. println (n6.parent. data); system. out. println (); system. out. println ("Tree:"); btree. display (); btree. insert (3); btree. insert (30); Res = btree. delete (-100); system. out. println (); system. out. println (RES + "tree after node-100 deleted"); btree. display (); Res = btree. delete (32); system. out. println (); system. out. println (RES + "tree after removing node 32"); btree. display (); Res = btree. delete (-1); system. out. println (); system. out. println (RES + "tree after deleting node-1"); btree. display (); Res = btree. delete (10); system. out. println (); system. out. println (RES + "tree after 10 Node Deletion"); btree. display (); Res = btree. delete (9); system. out. println (); system. out. println (RES + "tree after node 9 is deleted"); btree. display (); Res = btree. delete (2); system. out. println (); system. out. println (RES + "tree after node 2 is deleted"); btree. display (); btree. insert (101); btree. insert (103); btree. insert (150); btree. insert (130); btree. insert (155); btree. insert (185); system. out. println (); btree. display (); Res = btree. delete (103); system. out. println (); system. out. println (RES + "tree after node 103 deletion"); btree. display (); system. out. println (); Res = btree. delete (101); system. out. println (); system. out. println (RES + "tree after node 101 deletion"); btree. display (); system. out. println (); Res = btree. delete (150); system. out. println (); system. out. println (RES + "tree after node 150 deletion"); btree. display (); system. out. println (); Res = btree. delete (155); system. out. println (); system. out. println (RES + "tree after node 155 deletion"); btree. display (); system. out. println (); btree. insert (12); system. out. println ("after 12 is inserted, tree:"); btree. display (); system. out. println (); Res = btree. delete (12); system. out. println (); system. out. println (RES + "tree after node 12 is deleted"); btree. display (); system. out. println (); Res = btree. delete (90); system. out. println (); system. out. println (RES + "tree after 90"); btree. display (); system. out. println ();}}