给定一棵 BST,请在这棵 BST 上查找其对应的升序序列中的第 k 个元素(即第 k 小元素)。如下图的 BST,如果 k=3,那么所求节点为 10,如果 k=5,那么所求节点为 14。
解法一:中序遍历法,我们用一个栈作为辅助进行中序遍历,在遍历过程中,对出栈次数进行计数,出栈 k 次时即找到我们要的节点。算法复杂度为 O(n),n 为树的节点总数,算法描述如下:
/* initialization */
pCrawl = root
set initial stack element as NULL (sentinal)
/* traverse upto left extreme */
while(pCrawl is valid )
stack.push(pCrawl)
pCrawl = pCrawl.left
/* process other nodes */
while( pCrawl = stack.pop() is valid )
stop if sufficient number of elements are popped.
if( pCra