هل من الممكن شرح هذا الكود

public class BinaryTree2 {
    class Node
    {
        int key;
        Node left, right;

        public Node(int item)
        {
            key = item;
            left = right = null;
        }
    }

    // Root of BST
    Node root;

    // Constructor
    BinaryTree2()
    {
        root = null;
    }
    void deleteKey(int key) {

        root = deleteRec(root, key);
    }

    Node deleteRec(Node root, int key)
    {
        /* Base Case: If the tree is empty */
        if (root == null)
            return root;

        /* Otherwise, recur down the tree */
        if (key < root.key)
            root.left = deleteRec(root.left, key);
        else if (key > root.key)
            root.right = deleteRec(root.right, key);

            // if key is same as root's
            // key, then This is the
            // node to be deleted
        else {
            // node with only one child or no child
            if (root.left == null)
                return root.right;
            else if (root.right == null)
                return root.left;

            // node with two children: Get the inorder
            // successor (smallest in the right subtree)
            root.key = minValue(root.right);

            // Delete the inorder successor
            root.right = deleteRec(root.right, root.key);
        }

        return root;
    }

    int minValue(Node p)
    {
        Node cur = p.right;
        while (cur.left != null)
        {
            cur = cur.left;
        }
        return cur.key;
    }

    // This method mainly calls insertRec()
    void insert(int key)
    {


        root = insertRec(root, key;
    }

    /* A recursive function to
       insert a new key in BST */
    Node insertRec(Node cur, int key)
    {

        /* If the tree is empty,
           return a new node */
        if (cur == null)
        {
           cur = new Node(key);
            return cur;
        }

        /* Otherwise, recur down the tree */
        if (key < cur.key)
            cur.left = insertRec(cur.left, key);
        else if (key > root.key)
            cur.right = insertRec(cur.right, key);

        /* return the (unchanged) node pointer */
        return cur;
    }

    // This method mainly calls InorderRec()
    void inorder()
    {
        inorderRec(root);
    }

    // A utility function to
    // do inorder traversal of BST
    void inorderRec(Node root)
    {
        if (root != null) {
            inorderRec(root.left);
            System.out.println(root.key);
            inorderRec(root.right);
        }
    }
}

حيث اني لم افهم كيف سوف ترجع الدالة insertRec() كائن جديد من ال Node وسوف نجعل قيمة الروت تساويه وعندما حللت الكود وجدت ان الروت ثابت اي لم تتغير قيمته

وكذلك الأمر بالنسبة لdeleteRec()