Binary Tree operation (Java)

Source: Internet
Author: User
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 ();}}

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.