I recently interviewed a master's student for a job at our company. I asked him a very traditional question, and then was going to follow up on it with increasingly more difficult questions to see how deep his knowledge was. I wasn't out to "get" him at all, I hate interviewers that ask super-hard questions, I'm more interested in having a good conversation with the person to try to get a feel for what they really kn…
So I asked him an even simpler question: Given a binary search tree, write code to find a particular value. If you can't find the value, then return me the next smallest value. For example, if the tree contains 1, 2, 3, and 5, and I ask for 4, then return 3. Out of curiosity, what is the solution? I would imagine something like keeping a variable of the highest found value under 4 and if you don't find 4 then you use…
- If the node value matches, return it
- If the node value is too low:
- If possible, step right and repeat
- Otherwise, return this node value
- If the node value is too high:
- If possible, step left and repeat
- Otherwise, return the value of this node's predecessor:
- Walk up until you traverse a right link
- Return the node's value
- If you hit the root, the requested value is less than any value in the tree