我已經制定出瞭如何將樹葉從BST複製到另一個BST的算法。遞歸複製BST的所有樹葉到另一個BST
- 檢查如果樹空
- 如果我們到達葉,將數據複製到目標BST。
- 調用與源BST - >左和源BST - >右遞歸函數與目的地的指針各自的方向
- 否則,遞歸調用沒有dest - >左或dest - >右(因爲我們會去爲空)。
該算法是否可行?
434 int copy_leaves(node * source, node * & dest)
435 {
436 if (!source)
437 {
438 dest = NULL;
439 return 0;
440 }
441
442 if (!(source -> left) && !(source -> right))
443 {
444 dest = new node;
445 dest -> data = source -> data;
XXX dest -> left = dest -> right = NULL;
446 }
447
448 return copy_leaves(source -> left, dest) + //???
449 copy_leaves(source -> right, dest) + 1; //???
450 }
好吧我試着實現我的算法,並有幾個故障。我不知道在哪裏做遞歸調用。我知道我在兩次調用後到達null(然後我們知道該節點是葉),這意味着我複製數據。我不明白在哪裏傳遞dest-> right和dest - >離開遞歸調用。
它應該工作,小心他們骯髒的細節。它錯過了構建完美均衡BST的機會。 – greybeard
嘗試一下:)然後詢問https://codereview.stackexchange.com/他們認爲它:) –
(@FilipHaglund我相信你建議StevenTea在[CR]上呈現它(https://codereview.stackexchange .com/help/on-topic) - 差不多)。剛注意到這個問題_does not_read_all nodes_。 – greybeard