µ±Ç°Î»ÖãºÊ×Ò³ > ¿ª·¢½Ì³Ì > java½Ì³Ì >

Java³¬Ïêϸ½²½âÅÅÐò¶þ²æÊ÷

ʱ¼ä£º2022-06-03 15:30 À´Ô´£ºÎ´Öª ×÷Õߣº²»Íü³õÐÄ ÊÕ²Ø

ÅÅÐò¶þ²æÊ÷µÄÌØµãÊÇÒ»¸ö¸¸½ÚµãÖ»ÄÜÓÐ×óÓÒÁ½¸ö×ӽڵ㡢×ó½ÚµãµÄÖµ±È¸¸½ÚµãҪС¡¢ÓÒ½ÚµãµÄÖµÒª±È¸¸½ÚµãÒª´ó£¬ÄѶȲ¢²»´ó£¬µ«Êǵû¨Ê±¼äÀ´Àí½â

ÅÅÐò¶þ²æÊ÷¸ÅÄî

  • ¶þ²æÅÅÐòÊ÷£¨Binary Sort Tree£©£¬Óֳƶþ²æ²éÕÒÊ÷£¨Binary Search Tree£©£¬Òà³Æ¶þ²æËÑË÷Ê÷¡£ÊÇÊý¾Ý½á¹¹ÖеÄÒ»Àà¡£
  • ¶ÔÓÚ¶þ²æÅÅÐòÊ÷µÄÈκÎÒ»¸ö·ÇÒ¶×ӽڵ㣬 ÒªÇó×ó×Ó½ÚµãµÄÖµ±Èµ±Ç°½ÚµãµÄֵС£¬ÓÒ×Ó½ÚµãµÄÖµ±Èµ±Ç°½ÚµãµÄÖµ´ó¡£
  • ¶Ô¶þ²æÅÅÐòÊ÷½øÐÐÖÐÐò±éÀú£¬½á¹û¾ÍÊǰ´´ÓСµ½´óÅÅÐòµÄ¡£

ÅÅÐò¶þ²æÊ÷ÀàµÄ¶¨Òå

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;
}

Ìí¼Ó½Úµã

ÅÅÐò¶þ²æÊ÷Ìí¼Ó½ÚµãµÄÊ®·Ö¼òµ¥£¬ÎÞÂÛʹÓõݹ黹ÊÇÑ­»·£¬Ë¼Â·¶¼Ò»Ñù£¬ÕâÀïÎÒÓõݹéµÄ·½Ê½½²½â¡£

  1. ÿ´ÎÌí¼ÓÒ»¸ö½Úµãʱ£¬ÅжÏvalue(Ìí¼Ó½ÚµãµÄÖµ)ÓërootµÄÖµµÄ´óС¹ØÏµ£º Èôroot.value < value£¬ ˵Ã÷¸Ã½ÚµãÓ¦¸ÃÌí¼ÓÔÚrootµÄÓÒ×ÓÊ÷ÉÏ¡£Èç¹ûÓÒ×ÓÊ÷Ϊ¿Õ£¬Ö±½ÓÌí¼Ó£ºroot.right = new Node(value)£»Èç¹ûÓÒ×ÓÊ÷²»Îª¿Õ£¬ÄÇôµÝ¹é½øÓÒ×ÓÊ÷(Áîroot.rightΪroot)¡£
  2. Èô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);
            }
        }
    }

²éÕÒijһ½ÚµãµÄ¸¸½Úµã

¸Ã·½·¨Ê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ÅÅÐò¶þ²æÊ÷ÄÚÈÝÇëËÑË÷Ô´ÂëËѲØÍøÒÔǰµÄÎÄÕ»ò¼ÌÐøä¯ÀÀÏÂÃæµÄÏà¹ØÎÄÕÂÏ£Íû´ó¼ÒÒÔºó¶à¶àÖ§³ÖÔ´ÂëËѲØÍø£¡


ÏÂһƪ£ºÃ»ÓÐÁË

java½Ì³ÌÔĶÁÅÅÐÐ

×îÐÂÎÄÕÂ