複製二叉樹的非遞迴演算法 演算法思想和演算法實現

2021-04-19 04:23:43 字數 1053 閱讀 9856

1樓:樂意丶

else

int pde = 0;//指向待建立左子樹根和右子樹根的結點dest->data = sour->data;

de[pde] = dest;//先對根結點的複製initqueue(q);

enqueue(q, sour);

while (!isqempty(q))//當還沒複製完if (p->rchild)}}

return ok;

}演算法的思想很簡單,就是在對二叉樹進行層次遍歷的時候,對其進行復制。

遍歷是必須的,因為要複製一棵二叉樹,首先就是要對其進行遍歷。

想象一下,在對源二叉樹進行層次遍歷的時候,要複製的二叉樹也在進行層次遍歷,當源二叉樹遍歷到某個結點時,要複製的二叉樹上生成了相對應的結點,最終在遍歷完源二叉樹時,完成對要複製二叉樹的複製。在層次遍歷的時候,每個結點的左子樹右子樹的情況都是可以知道的,所以在相應複製的時候也能建立對應的左子樹右子樹。

演算法僅供參考,未必優秀,不過想的時候,千萬不要想複雜了,發散地想,很快就可以想到的。

編寫一個複製一棵二叉樹的遞迴演算法……

2樓:匿名使用者

}//copytree

hiahia,同學,拿分來吧~

3樓:南宮景行漢瑾

搜一下:編寫一個複製一棵二叉樹的遞迴演算法……

4樓:樂意丶

else

return ok;

}遞迴思想如下:

①如果樹為空,則複製空樹

②否則,複製二叉樹的根結點,遞迴呼叫複製其左子樹,遞迴呼叫複製其右子樹

怎樣實現二叉樹的前序遍歷的非遞迴演算法

怎樣實現二叉樹的前序遍歷的非遞迴演算法

遞迴不遞迴只是表象,本質都是壓棧,出棧的操作,只不過遞迴是以函式為元素進行的棧操作,不遞迴演算法就是把樹的元素來棧操作,在一個函式內部完成,看起來就沒有遞迴。非遞迴的話,就用堆疊實現了啊 先序遍歷二叉樹的遞迴演算法怎樣理解?二叉樹的結點結構是 1 根結點 存放結點資料 2 左子樹指標 3 右子樹指計...

C語言二叉樹遞迴演算法怎麼做?什麼是二叉樹的遞迴?

include include struct treenode typedef treenode bitree void visit treenode node 結點總數。int node bitree t return node t left node t right 1 前序。void preo...

非遞迴的二叉樹前序遍歷演算法有什麼用途

遞迴和非遞迴只是解決問題的方法的不同,本質還是一樣的。2.遞迴演算法相對於非遞迴演算法來說效率通常都會更低2.2 由於編譯器對附加的一些棧保護機制會導致遞迴執行的更加低效3.使用迴圈代替遞迴演算法,通常可以獲得更好的執行效率和空間效率,在二叉樹層次較深的情況下,採用非遞迴方式遍歷能夠有效的提升遍歷的...