public class binarySortTree {
class Node{
int value;
Node left;
Node right;
public Node(int value){
this.value = value;
}
public void display(){
System.out.print(this.value + " ");
}
}
Node root;
}
ÅÅÐò¶þ²æÊ÷Ìí¼Ó½ÚµãµÄÊ®·Ö¼òµ¥£¬ÎÞÂÛʹÓõݹ黹ÊÇÑ»·£¬Ë¼Â·¶¼Ò»Ñù£¬ÕâÀïÎÒÓõݹéµÄ·½Ê½½²½â¡£
root.value < value£¬ ˵Ã÷¸Ã½ÚµãÓ¦¸ÃÌí¼ÓÔÚrootµÄÓÒ×ÓÊ÷ÉÏ¡£Èç¹ûÓÒ×ÓÊ÷Ϊ¿Õ£¬Ö±½ÓÌí¼Ó£ºroot.right = new Node(value)£»Èç¹ûÓÒ×ÓÊ÷²»Îª¿Õ£¬ÄÇôµÝ¹é½øÓÒ×ÓÊ÷(Áîroot.rightΪroot)¡£root.value >= value£¬ ˵Ã÷¸Ã½ÚµãÓ¦¸ÃÌí¼ÓÔÚrootµÄ×ó×ÓÊ÷ÉÏ¡£Èç¹û×ó×ÓÊ÷Ϊ¿Õ£¬Ö±½ÓÌí¼Ó£ºroot.left = new Node(value)£»Èç¹û×ó×ÓÊ÷²»Îª¿Õ£¬ÄÇôµÝ¹é½øÓÒ×ÓÊ÷(Áîroot.leftΪroot)¡£´úÂëÈçÏ£º
//Ìí¼Ó½Úµã
//´Ë·½·¨¿ÉÒÔÀàÄÚ²¿·½·¨µÄµ÷ÓÃ
private void add(Node root,int value){
//Ìí¼Ó½ÚµãµÄÖµ´óÓÚ¸ù½ÚµãµÄÖµ£¬¸Ã½ÚµãÌí¼Óµ½¸ù½ÚµãµÄÓÒ×ÓÊ÷ÉÏ
if(value > root.value){
//¸ù½ÚµãµÄÓÒ×ÓÊ÷Ϊ¿Õ£¬Ö±½ÓÌí¼Ó
if(root.right == null){
root.right = new Node(value);
}
//¸ù½ÚµãÓÒ×ÓÊ÷²»Îª¿Õ£¬µÝ¹éÍùÓÒ×ÓÊ÷²å
else{
add(root.right,value);
}
}
//Ìí¼Ó½ÚµãµÄֵСÓÚ»òÕßµÈÓÚ¸ù½ÚµãµÄÖµ£¬¸Ã½ÚµãÓ¦¸ÃÌí¼Óµ½×ó×ÓÊ÷
else{
//×ó×ÓÊ÷Ϊ¿Õ£¬Ö±½ÓÌí¼Ó
if(root.left == null){
root.left = new Node(value);
}
//×ó×ÓÊ÷²»Îª¿Õ£¬µÝ¹éÍù×ó×ÓÊ÷Ìí¼Ó
else{
add(root.left, value);
}
}
}
//´Ë·½·¨ÔÚÀàÄÚ²¿ºÍÀàÍⲿ¶¼¿ÉÒÔµ÷ÓÃ
public void add(int value){
//µ±Ç°Ê÷Ϊ¿ÕÊ÷
if(root == null){
root = new Node(value);
return;
}
add(root, value);
}
ÒòΪ¶þ²æÅÅÐòÊ÷ÖÐÐò±éÀúµÄ½á¹û¾ÍÊÇÅÅÐòºÃµÄ£¬ËùÒÔÕâÀïÖ»ÌṩÖÐÐò±éÀú¡£
´úÂëÈçÏ£º
//ÖÐÐò±éÀúÊ÷
private void inPrevOrder(Node root){
if(root == null) return;
inPrevOrder(root.left);
root.display();
inPrevOrder(root.right);
}
public void inPrevOrder(){
System.out.print("ÖÐÐò±éÀú£º");
inPrevOrder(root);
}
¸Ã·½·¨ÊDzéÕÒvalueÔÚ¶þ²æÊ÷ÖжÔÓ¦µÄλÖã¬ÊÇΪɾ³ý½ÚµãÌṩµÄ·½·¨¡£
/**
* ͨ¹ývalue²éÕÒ¶þ²æÊ÷ÖеĽڵã
* @param root ±»²éÕÒÊ÷µÄ¸ù½Úµã
* @param value Òª²éÕÒµÄÖµ
* @return ·µ»Ø²éÕÒµ½µÄ½Úµã
*/
private Node searchNode(Node root, int value){
//±»²éÕÒÊ÷Ϊnull£¬Òª²éÕҽڵ㲻´æÔÚ
if(root == null)
return null;
//ÕÒµ½ÁË£¬·µ»Ø½Úµã
else if(root.value == value){
return root;
}
//¸Ã½Úµã²»ÊÇÒª²éÕҽڵ㣬¼ÌÐø²éÕÒ
else{
//¸Ã½ÚµãµÄÖµ´óÓÚvalue£¬Íù¸Ã½ÚµãµÄ×ó×ÓÊ÷µÝ¹é²éÕÒ
if(root.value > value){
return searchNode(root.left, value);
}
//¸Ã½ÚµãµÄֵСÓÚvalue,Íù¸Ã½ÚµãµÄÓÒ×ÓÊ÷µÝ¹é²éÕÒ
else{
return searchNode(root.right, value);
}
}
}
¸Ã·½·¨ÊDzéÕÒ¶þ²æÊ÷ÖÐÒ»¸ö½ÚµãµÄ¸¸½Úµã£¬Ò²ÊÇΪɾ³ý½ÚµãÌṩµÄ·½·¨¡£
/**
* ²éÕÒij½ÚµãµÄ¸¸½Úµã£¬²¢·µ»Ø
* @param root ±»²éÕÒÊ÷µÄ¸ù½Úµã
* @param node Òª²éÕҵĽڵã
* @return ·µ»Ø±»²éÕÒ½ÚµãµÄ¸¸½Úµã
*/
private Node searchParentNode(Node root, Node node){
//±»²éÕÒÊ÷Ϊnull»òÕ߸ù½Úµã¾ÍÊÇÒª²éÕҵĽڵ㣬ÄÇôҪ²éÕÒ½ÚµãµÄ¸¸½Úµã²»´æÔÚ
if(root == null || root == node){
return null;
}
else if(root.left != null && root.left == node || root.right != null && root.right == node){
return root;
}
else{
if(root.value > node.value){
return searchParentNode(root.left, node);
}
else{
return searchParentNode(root.right, node);
}
}
}
ɾ³ý½ÚµãÊÇÅÅÐò¶þ²æÊ÷ÖÐ×îÂé·³µÄ·½·¨£¬ÒòΪËüÓкܶàÖÖÇé¿ö¡£
·½·¨ÈçÏ£º
µÚÒ»ÖÖÇé¿ö£ºÉ¾³ýµÄ½ÚµãÊÇÒ¶×Ó½Úµã
(1)ÐèÇóÏÈÈ¥ÕÒµ½ÒªÉ¾³ýµÄ½áµãtargetNode(2)ÕÒµ½targetNodeµÄ¸¸½áµãparent
(3)È·¶¨targetNodeÊÇparentµÄ×ó×Ó½áµã»¹ÊÇÓÒ×Ó½áµã
3.1Èç¹ûtargetNodeÊÇparentµÄ×ó×Ó½áµã:parent.left = null;
3.2Èç¹ûtargetNodeÊÇparentµÄÓÒ×Ó½áµã:parent.right = null;
µÚ¶þÖÖÇé¿ö:ɾ³ýÖ»ÓÐÒ»¿Å×ÓÊ÷µÄ½Úµã
(1)ÐèÇóÏÈÈ¥ÕÒµ½ÒªÉ¾³ýµÄ½áµãtargetNode(2)ÕÒµ½targetNodeµÄ¸¸½áµãparent
(3)È·¶¨targetNodeµÄ×Ó½áµãÊÇ×ó×Ó½áµã»¹ÊÇÓÒ×Ó½áµã
(4)È·¶¨targetNodeÊÇparentµÄ×ó×Ó½áµã»¹ÊÇÓÒ×Ó½áµã
(5)Èç¹ûtargetNodeÓÐ×ó×Ó½áµã
5.1Èç¹ûtargetNodeÊÇparentµÄ×ó×Ó½áµãparent.left = targetNode.left;
5.2Èç¹ûtargetNodeÊÇparentµÄÓÒ×Ó½áµãparent.right = targetNode.left;
(6)Èç¹ûtargetNodeÓÐÓÒ×Ó½áµã
6.1Èç¹ûtargetNodeÊÇ parent µÄ×ó×Ó½áµãparent.left = targetNode.right;
6.2Èç¹ûtargetNodeÊÇparent µÄÓÒ×Ó½áµãparent.right = targetNode.right
µÚÈýÖÖÇé¿ö£ºÉ¾³ýµÄ½ÚµãÓÐ×óÓÒÁ½¸ö×ÓÊ÷
(1)ÐèÇóÏÈÈ¥ÕÒµ½ÒªÉ¾³ýµÄ½áµãtargetNode(2)ÔÚÓÒ×ÓÊ÷ÕÒµ½×îСµÄ½Úµã£¬ÓÃÒ»¸ötemp±£´æÕâ¸ö½ÚµãµÄÖµ£¬È»ºóɾ³ýÕâ¸ö×îС½Úµã(¸Ã×îС½ÚµãÒ»¶¨ÊÇÂú×ãµÚÒ»ÖÖÇé¿öµÄ)
(3)targetNode.value = temp
³ýÁËÒÔÉÏÇé¿ö£¬»¹Òª¿¼ÂÇҪɾ³ýµÄ½Úµã¾ÍÊǸù½ÚµãµÄÇé¿ö(´ËʱËüµÄ¸¸½ÚµãΪnull)£¬ÏÂÃæ»áÔÚ´úÂëÖÐչʾ£¬´úÂëÈçÏ£º
public void remove(int vlaue){
//ÕÒµ½ÒªÉ¾³ýµÄ½Úµã
Node targetNode = searchNode(root,vlaue);
//Ҫɾ³ý½Úµã²»´æÔÚ
if(targetNode == null) return;
//ÕÒµ½ÒªÉ¾³ý½ÚµãµÄ¸¸½Úµã
Node targetNodeParent = searchParentNode(root,targetNode);
//Ҫɾ³ý½ÚµãΪҶ×Ó½Úµã
if(targetNode.left == null && targetNode.right == null){
//Ҫɾ³ýµÄ½Úµã¾ÍÊǸù½Úµã
if(targetNodeParent == null){
root = null;
}
else{
//Ҫɾ³ý½ÚµãÊÇÆä¸¸½ÚµãµÄ×ó½Úµã
if(targetNodeParent.left == targetNode){
targetNodeParent.left = null;
}
else{
targetNodeParent.right = null;
}
}
}
//Ҫɾ³ý½ÚµãÖ»ÓÐÒ»¸ö×ó×ÓÊ÷
else if(targetNode.left != null && targetNode.right == null){
//Ҫɾ³ýµÄ½Úµã¾ÍÊǸù½Úµã
if(targetNodeParent == null) {
root = root.left;
}
//Ҫɾ³ý½ÚµãÊÇÆä¸¸½ÚµãµÄ×ó½Úµã
else if(targetNodeParent.left != null && targetNodeParent.left.value == targetNode.value){
targetNodeParent.left = targetNode.left;
}
//Ҫɾ³ý½ÚµãÊÇÆä¸¸½ÚµãµÄÓÒ½Úµã
else{
targetNodeParent.right = targetNode.left;
}
}
//Ҫɾ³ý½ÚµãÖ»ÓÐÒ»¸öÓÒ×ÓÊ÷
else if(targetNode.right != null && targetNode.left == null){
//Ҫɾ³ýµÄ½Úµã¾ÍÊǸù½Úµã
if(targetNodeParent == null) {
root = root.right;
return;
}
//Ҫɾ³ý½ÚµãÊÇÆä¸¸½ÚµãµÄ×ó½Úµã
else if(targetNodeParent.left != null && targetNodeParent.left.value == targetNode.value){
targetNodeParent.left = targetNode.right;
}
//Ҫɾ³ý½ÚµãÊÇÆä¸¸½ÚµãµÄÓÒ½Úµã
else{
targetNodeParent.right = targetNode.right;
}
}
//Ҫɾ³ý½ÚµãÓÒ×óÓÒ¶¼Óнڵã
else{
//ÕÒµ½ÓÒ×ÓÊ÷×îСµÄ½Úµã
Node minNode = targetNode.right;
while(minNode.left != null){
minNode = minNode.left;
}
int temp = minNode.value;
//ÕÒµ½ÓÒ×ÓÊ÷ÉÏ×îС½ÚµãµÄ¸¸½Úµã
Node minNodeParent = searchParentNode(targetNode.right,minNode);
//ÓÒ×ÓÊ÷¸ù½Úµã¾ÍÊÇ×îС½Úµã
if(minNodeParent == null){
targetNode.right = minNode.right;
}
else{
//Ҫɾ³ý½ÚµãÊÇÆä¸¸½ÚµãµÄ×ó½Úµã
minNodeParent.left = minNode.right;
}
targetNode.value = temp;
}
}
µ½´ËÕâÆª¹ØÓÚJava³¬Ïêϸ½²½âÅÅÐò¶þ²æÊ÷µÄÎÄÕ¾ͽéÉܵ½ÕâÁË,¸ü¶àÏà¹ØJavaÅÅÐò¶þ²æÊ÷ÄÚÈÝÇëËÑË÷Ô´ÂëËѲØÍøÒÔǰµÄÎÄÕ»ò¼ÌÐøä¯ÀÀÏÂÃæµÄÏà¹ØÎÄÕÂÏ£Íû´ó¼ÒÒÔºó¶à¶àÖ§³ÖÔ´ÂëËѲØÍø£¡
Apache Solr ³õ¼¶½Ì³Ì£¨½éÉÜ¡¢°²×°²¿Êð¡¢Ja
Javaö¾ÙÓëÆÕͨÀàµÄÇø±ðºÍʹÓÃÈ«½âÎö
Java(5/6ºÍ8)ÖÐinterfaceºÍAbstract Class
Ãâ·ÑjavaÊÓÆµÏÂÔØ£¬strutsÊÓÆµ£¬hibernate
EclipseÖÐÅäÖÃAjaxµÄDWRµÄ¼òµ¥·½·¨
¶¯Á¦½Úµã_ÍõÓÂ_ DRPÏîÄ¿ÊÓÆµ½Ì³ÌÍêÕû°æ292
OracleÃÜıB¼Æ»® JDK 7»ò³ÉÌøÆ±Íõ
ÈÈÃÅÔ´Âë