演算法導論12 1 3習題解答 非遞迴中序遍歷

2021-09-06 03:05:41 字數 1272 閱讀 4970

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...