-1
A
回答
1
我已經看到它完成的方式是使用一些遞歸函數,一直到樹葉,刪除子元素並將指針移回到根。
function recursiveRelease(root)
if root!= null
if (leftchild)
recursiveRelease(leftchild)
remove leftchild from tree
make pointer to leftchild = nullptr
if (rightchild)
recursiveRelease(rightchild)
remove rightchild from tree
make pointer to rightchild = nullptr
之後,根被破壞;希望這有助於!
1
有一個O(n)時間,O(1) - 空間算法用於刪除BST中不需要任何遞歸的所有節點。這個想法如下:
- 如果根目錄沒有留下子項,則緩存一個指向樹的右側子項的指針,刪除根節點,然後繼續刪除曾經是右側子樹的樹。
- 否則,如果根目錄有左側子項,則執行tree rotation以將左側子項旋轉至根目錄。
該過程最終會刪除樹中的所有節點,不需要遞歸,只需要恆定的額外空間。
這就是說......真的很奇怪,你不能讓你的幫助函數有參數。這聽起來像是一個非常武斷的限制。你可能想問爲什麼確實如此。
+0
哦,非常整齊。感謝您寫這個答案。 – blazs
3
我寧願不寫任何析構函數。
只要確保BST類將unique_ptr存儲到根節點,並且每個節點都將unique_ptr-s存儲到其子節點。然後,當BST對象被破壞時,整個樹會自動被破壞。
相關問題
- 1. 在C++中實現一個虛析構函數
- 2. 如何在Julia中實現BST?
- 3. 實現在生成的C代碼析構函數
- 4. 如何在C中實現rollDice()函數?
- 5. C中的析構函數#
- 6. C++中的析構函數
- 7. C++中的析構函數
- 8. 在C#中實現函數
- 9. 析構函數LinkedListelement在C++
- 10. 析構函數在C++
- 11. 在c#中析構函數的使用?
- 12. 如何實現在構造函數中使用自己的對象的析構函數
- 13. C++中的構造函數和析構函數與C#比較
- 14. C中的析構函數和構造函數C
- 15. C++ LinkedList隊列實現和析構函數錯誤:「Aborted(Core Dumped)」
- 16. 如何在C中實現結構的二維數組C
- 17. 圖C中的ADT析構函數C
- 18. 如何實現純虛擬析構函數?
- 19. 構造函數和析構函數 - C++
- 20. C++類構造函數/析構函數
- 21. C++中構造函數,複製構造函數,析構函數序列中的額外析構函數
- 22. C++構造函數實現錯誤
- 23. C++的析構函數
- 24. 如何實現構造函數?
- 25. 如何實現簡單的C++函數
- 26. BST在Python中的實現錯誤
- 27. new []/delete []並在C++中拋出構造函數/析構函數
- 28. 析構函數不在C++中執行
- 29. 在C++中調用析構函數
- 30. 析構函數在C++中是如何工作的
請參閱CComBSTR https://msdn.microsoft.com/en-us/library/zh7x9w3f.aspx –
爲什麼函數不能使用任何參數?這似乎是一個非常不尋常的限制。 – templatetypedef