clrs 12.1-3:
演算法思想:
1.採用棧的話,先尋找最左邊的節點,把經過的節點都存入棧中,第乙個被彈出來的為最左節點,那麼訪問其右子樹,對右子樹也像前面一樣遍歷,整個流程跟遞迴一樣。
2.不採用棧的話,先是訪問最左節點,然後訪問其右子樹,然後回溯到最左節點的父節點,不斷重複這個過程,思路還是一樣。這裡參考了重劍無鋒的
構造的樹的樹如下:
//遞迴實現中序遍歷
void
binarytree::recurse_in_order_visit(node
*root)}
//非遞迴用棧實現中序遍歷
void
binarytree::non_recurse_using_stack_in_order_visit(node
*root)
if(top
>-1
)}}
//非遞迴且不用棧實現中序遍歷
void
binarytree::non_recurse_non_stack_in_order_visit(node
*root)
if(
!root
->
visited )
if( root
->
right
!=null &&!
root
->
right
->
visited )
else}}
演算法導論習題解答 2 3 7
2.3 7 請給出乙個執行為 nlgn 的演算法 偽碼 使之能在給定乙個由n 個整數構成的集合s 和另乙個整數x 時,判斷出s 中是否存在有兩個其和等於x 的元素。解 解題思路 先對集合s進行歸併排序,然後新建乙個陣列s1,使得s1 i x s i 再將兩個陣列並起來。如果在並的過程中發現有兩個元素...
演算法導論6 5 7習題解答
clrs 6.5 7 heap delete a,i 操作將結點i中的項從堆a中刪去。對含n個元素的最大堆,請給出時間為o lgn 的heap delete的實現。演算法思想 對即將被刪的i處的元素設定為堆中末尾的元素,同時堆的大小減1.此題同時附帶6.2 5的解答 如下 1 include 2 u...
非遞迴中序遍歷 演算法導論12 1 3
問題描述 中序遍歷結果為 1 2 3 4 5 6 7 8 9 演算法實現 非遞迴用棧實現中序遍歷 void binarytree non recurse using stack in order visit node root if top 1 該演算法實現步驟如下 以下全部實現 來自 includ...