3. (16 pts.] Consider the SUCCESSOR function (Algorithm 4) for a general linked-structured BST implementation for a sorted map ADT. It takes as input a node w in a general BST and outputs its successor node in the BST, that is, the node whose key immediately follows the key w.key of node w, if any otherwise it outputs NULL. It uses two auxiliary functions, FIRSTLEFT ANCESTOR and FLOOR ENTRYNODE. Algorithm 4 SUCCESSOR (W) 1: if w = NULL then return w 2: if w.right = NULL then return FIRSTLEFTANCESTOR(0) 3: return FLOORENTRYNODE(w.right) (c) Write down tight big-Oh characterizations of the worst-case running time and space complexity of the implementation of the SUCCESSOR function (Algorithm 4) as a function of the number of nodes n in the (general) BST. Time Space (a) Write an algorithm, using pseudocode, for the function FIRSTLEFTANCESTOR, which takes as input a node w in the BST and outputs the first ancestor u of win the BST such that w is the ceiling entry node of the left subtree w.left of u, that is, the key w.key of w is the largest in the left subtree of u, so that, w is the predecessor of u in the BST; it outputs NULL if no such ancestor exists, or if the subtree is empty. The algorithm should run in time that is linear in the depth of node w in the BST, and use a constant amount of space. (b) Write an algorithm, using pseudocode, for the function FLOOR ENTRYNODE, which takes as input a node w in the BST and outputs the node with the smallest key in the subtree rooted at w, that is, the last left ancestor of w or said differently, the left-most node in the subtree rooted at w); it outputs NULL if no such node exists, or if the subtree is empty. The algorithm should run in time that is linear in the height of the subtree rooted at w, and use a constant amount of space. 3. (16 pts.] Consider the SUCCESSOR function (Algorithm 4) for a general linked-structured BST implementation for a sorted map ADT. It takes as input a node w in a general BST and outputs its successor node in the BST, that is, the node whose key immediately follows the key w.key of node w, if any otherwise it outputs NULL. It uses two auxiliary functions, FIRSTLEFT ANCESTOR and FLOOR ENTRYNODE. Algorithm 4 SUCCESSOR (W) 1: if w = NULL then return w 2: if w.right = NULL then return FIRSTLEFTANCESTOR(0) 3: return FLOORENTRYNODE(w.right) (c) Write down tight big-Oh characterizations of the worst-case running time and space complexity of the implementation of the SUCCESSOR function (Algorithm 4) as a function of the number of nodes n in the (general) BST. Time Space (a) Write an algorithm, using pseudocode, for the function FIRSTLEFTANCESTOR, which takes as input a node w in the BST and outputs the first ancestor u of win the BST such that w is the ceiling entry node of the left subtree w.left of u, that is, the key w.key of w is the largest in the left subtree of u, so that, w is the predecessor of u in the BST; it outputs NULL if no such ancestor exists, or if the subtree is empty. The algorithm should run in time that is linear in the depth of node w in the BST, and use a constant amount of space. (b) Write an algorithm, using pseudocode, for the function FLOOR ENTRYNODE, which takes as input a node w in the BST and outputs the node with the smallest key in the subtree rooted at w, that is, the last left ancestor of w or said differently, the left-most node in the subtree rooted at w); it outputs NULL if no such node exists, or if the subtree is empty. The algorithm should run in time that is linear in the height of the subtree rooted at w, and use a constant amount of space