Java, Binary tree remove method

后端 未结 5 1914
[愿得一人]
[愿得一人] 2020-12-21 13:18

I am trying to write a remove(node cRoot, Object o) function for a sorted binary tree.

Here is what I have so far:

private boolean remov         


        
5条回答
  •  执笔经年
    2020-12-21 13:34

    I found this code on Habrahabr. I've just added comments.

    public void remove (T1 k){
        Node x = root, y = null;
        // from while to if(x == null) - searching for key
        while(x != null){
            int cmp = k.compareTo(x.key);
            if(cmp == 0){
                break;  // quit cycle if key element is found
            } else {
                y = x;
                if(cmp < 0){
                    x = x.left;
                } else {
                    x = x.right;
                }
            }
        }
        if(x == null) return;   // if key is not found or tree is empty
        if(x.right == null){    // if element found has not right child
            if(y == null){      // if element found is root & has not right child
                root = x.left; 
            } else {            // if element found is not root & has not right child           
                if(x == y.left) y.left = x.left;    
                else y.right = x.left;              
            }
        } else {            // element found has right child, so search for most left of rights
            Node mostLeft = x.right;
            y = null;
            while(mostLeft.left != null) {
                y = mostLeft;
                mostLeft = mostLeft.left;
            }
            if(y == null){  // if right child of element found has not left child
                x.right = mostLeft.right;
            } else {        // if right child of element found has left child
                y.left = mostLeft.right;
            }
            x.key = mostLeft.key;       
            x.value = mostLeft.value;   
        }
    }
    

提交回复
热议问题