3 回答

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊
一個(gè)更簡(jiǎn)單的解決方案是進(jìn)行有序遍歷并跟蹤當(dāng)前要打印的元素(不打?。?。當(dāng)我們達(dá)到k時(shí),打印元素并跳過(guò)其余的樹(shù)遍歷。
void findK(Node* p, int* k) {
if(!p || k < 0) return;
findK(p->left, k);
--k;
if(k == 0) {
print p->data;
return;
}
findK(p->right, k);
}

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊
public int ReturnKthSmallestElement1(int k)
{
Node node = Root;
int count = k;
int sizeOfLeftSubtree = 0;
while(node != null)
{
sizeOfLeftSubtree = node.SizeOfLeftSubtree();
if (sizeOfLeftSubtree + 1 == count)
return node.Value;
else if (sizeOfLeftSubtree < count)
{
node = node.Right;
count -= sizeOfLeftSubtree+1;
}
else
{
node = node.Left;
}
}
return -1;
}
這是我基于上述算法在C#中的實(shí)現(xiàn),只是以為我會(huì)發(fā)布它,以便人們可以更好地理解它對(duì)我有用
謝謝你IVlad
添加回答
舉報(bào)