給定一個具有n個節點的二叉樹,是否有可能檢查給定樹是否爲BST或O(log n)時間複雜度?O(log n)中的二叉搜索樹?
-1
A
回答
0
如果n是節點的數量,那麼不,因爲您至少需要查看一次所有值,所以您至少需要O(n)。但是如果你將n定義爲像你可以達到的子樹的總數那樣特殊的東西。 (然而,這樣做有點愚蠢,因爲這樣說如果你有100美分而不是1歐元就有更多的錢,它看起來更令人印象深刻,但也很奇怪,沒有附加價值,這只是令人困惑與正常人一起工作並不這樣做)
這裏是O(n)算法:如果它是BST,那麼左邊和右邊的樹都是BST,其中所有的值都會在一定的最小值和最大值,所以你可以創建一個去有點像這樣的遞歸方法:
public boolean isBST(subtree, minvalue, maxvalue){
root=root of subtree;
if(root>maxvalue || root<minvalue) return false;
if(has left child)
if(!isBST(left-child-tree, minvalue, rootvalue)) return false;
if(has right child)
if(!isBST(right-child-tree, rootvalue, maxvalue)) return false;
return true;
}
,並調用此方法與isBST(樹,負無窮,正無窮大)。這是僞代碼,當然可以更好地實現。
+0
你也可以在這裏看到不同版本的O(n)算法:http://www.geeksforgeeks.org/a-program-to-check-if-a-binary-tree-is-bst-or-not / – Lavandysh
相關問題
- 1. 爲什麼每個二叉搜索樹的高度不是O(log n)
- 2. 二叉樹到二叉搜索樹(BST)
- 3. 證明具有n個元素的二叉樹堆中的二叉樹數量最多爲O(log n)
- 4. 從二叉搜索樹
- 5. 圖形搜索O(log(N)(N + M)
- 6. 二叉搜索樹分析
- 7. 二叉搜索樹更新
- 8. 二叉搜索樹
- 9. 二叉搜索樹
- 10. 二叉搜索樹
- 11. 二叉搜索樹
- 12. 二叉搜索樹
- 13. 二叉搜索樹
- 14. 二叉搜索樹
- 15. 二叉搜索樹
- 16. 時間複雜度 - O(n^2)到O(n log n)搜索
- 17. 二叉搜索樹Clojure中
- 18. 實現一個O(log n)的Foldable.elem二進制搜索樹在Haskell
- 19. 二叉樹中最大的二叉樹搜索樹
- 20. 二叉樹搜索的複雜性
- 21. 在二叉搜索樹中搜索值
- 22. 搜索在N叉樹
- 23. AVL樹如何保證O(log(n))全天搜索
- 24. 二叉搜索樹相交
- 25. 二叉搜索樹中序樹顯示
- 26. 爲什麼O(N日誌N)構建二進制搜索樹?
- 27. 方案二叉搜索樹
- 28. 刪除二叉搜索樹
- 29. 二叉搜索樹,comparsion
- 30. 二叉搜索樹分析
我認爲這個問題更適合[計算機科學](https://cs.stackexchange.com/)? – Fildor