public static bNode findNextInOrderSucessor(bNode root, int origin){
        //Due to the properties of a BST (left child is <= and right child is >), we can use the following algorithm:
        //If right subtree exists, find the left most leaf in right subtree
        //else backtrack upwards until you find a node such that the node is the left
        //child of its parent

        if(root == null) return null;
        
        bNode start = binarySearch(root, origin);
        if(start == null) return null; //meaning not found

        if(start.right != null) return findLeftMostChild(start.right);
        else{
            //backtrack up until we find a node who is the left child of its parent
            if(start.parent == null) return null; //meaning there is no next in order successor
            bNode parent = start.parent;
            bNode curr = start;
            while(parent.right == curr){
                curr = parent;
                parent = curr.parent;
                if(parent == null) return null;
            }
            return parent;
        }
    }