Binary Search Tree之所以被大家喜爱,就是因为它的结构很方便大家查找某一个元素
大家都知道, BST的结构是 Root的左半边所有节点都比Root小, Root的右半边所有节点都比Root的大。并且,所有子tree 都包含了这个特点。 比如上图,Root 为50,root左半部分所有的节点都比50小,右边所有节点都比50大。 再看看子tree。 17位left subtree的root。12比17小吧, 23比17大吧。
在这个结构下,最小的元素一定是在最左下角。 上图中就是9. 第二小的元素是9的爸爸,12, 第三小的是subroot的右边,14. 而12,9,14 这几个东西如果看成一整个节点的话,这个节点的爸爸17就是下一个最小的元素,然后再往右走,19,23.
这种走法就是典型的in-order traversal. 那么找kth-element其实也就是判断一下我们in-order了有没有K次。
Follow up:
What if the BST is modified (insert/delete operations) often and you need to find the kth smallest frequently? How would you optimize the kthSmallest routine?