3 回答

TA貢獻1803條經驗 獲得超6個贊
一個更簡單的解決方案是進行有序遍歷并跟蹤當前要打印的元素(不打?。.斘覀冞_到k時,打印元素并跳過其余的樹遍歷。
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貢獻1851條經驗 獲得超5個贊
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#中的實現,只是以為我會發布它,以便人們可以更好地理解它對我有用
謝謝你IVlad
添加回答
舉報