2014-09-12 110 views
0

給定一個有序排列的數組寫一個程序來找到一個深度最小的二叉搜索樹,那麼深度是多少?二叉查找樹的深度

我知道如何將數組轉換爲平衡BST,但是如何使函數創建最小深度的BST?

+0

你只需要找到深度,或者你需要找到樹? – 2014-09-12 15:00:41

+1

@ AD.Net號碼它像日誌(array.length)(也許+1)。 – kraskevich 2014-09-12 15:30:55

+0

@ user2040251,當然,謝謝。我只用6-7的數字,錯過了每個子數組的兩半 – 2014-09-12 15:40:01

回答

0

1)構建一個高度爲h的完整二叉樹(h是最小數字,例如2^h - 1> =數組中元素的數量)。此時您可以忽略輸入數組。顯然,這棵樹具有最小深度(任何深度較小的樹都不能有足夠的節點來存儲所有數組元素)。

2)現在你可以使用簡單的遞歸方法填充這個數組元素:
i)填充左子樹。
ii)將最小的未使用號碼放入當前節點。
iii)填寫正確的子樹。
不要忘記在開始遍歷之前刪除2^h - 1 - n樹葉(其中n是輸入數組大小)(此步驟是必需的,因爲完整樹的大小爲2^h - 1,但數組中只有n個元素)。

一個O(n)該算法的實現是非常有前途的(您可以明確地構建樹,刪除多餘的樹葉,然後遍歷它,因爲樹中的節點數爲O(n))。

+0

對於遲到的回覆感到抱歉,非常感謝你。你可以展示C函數對於上面的實現會是什麼樣子?我對c很陌生,而且在執行時遇到問題。 – overflow 2014-09-15 06:39:03