查找BST中每個級別的最大元素。查找BST中每個級別的最大元素
[1] In O(n) time and O(1) space
[2] In O(logn) time and O(n) space
編輯:發表@Imposter解決方案的工作罰款[1] 這裏是[1]
private int level = 0;
private int VisitedLevels = -1;
public void findLargestByLevel(AvlNode root)
{
if(root == null) return;
else
{
if(level > VisitedLevels)
{
System.out.println(root.data + " @ Level = " + level);
VisitedLevels++;
}
level++;
findLargestByLevel(root.right);
findLargestByLevel(root.left);
level--;
}
}
的解決方案,但我還是沒能制定出一個解決方案[ 2]
,我已經想好了辦法:如果我們預處理樹和扁平像樹的系列化,
100
50 200
20 75
#L0, 100, #L1, 50, 200, #L2, 20, 75, #L3
凡#L是水平的標誌:
那麼我們可以很容易地回答水平最高和最低的O(1)時間查詢, 此外,如果樹得到改進,我們可以進行插入和在LogN時間從序列化數據中刪除。 請爲[2]建議某人,儘管在我看來zit看起來不可能實現[2],但我希望聽到其他人的建議
看起來像功課,不是嗎?沒有一些預處理[2]是不可能的(如果你嘗試在O(log n)中找到填充O(n)個存儲單元的算法,註定會失敗)。 – KCH
很好。什麼試過了?已經諮詢了哪些資源? – 2012-09-21 00:41:15
如果我不這樣做? ;) – MAK