轉載:http://www.cnblogs.com/GoAhead/archive/2012/05/22/2513847.html 二叉樹的深度,遞歸和非遞歸實現 遞歸實現基本思想: 為了求得樹的深度,可以先求左右子樹的深度 ...
一 遞歸的方法 思路: 我們可以從另一個角度來理解樹的深度: 如果一棵樹只有一個結點,那么它的深度為 如果根結點只有左子樹沒有右子樹,那么樹的深度是左子樹的深度加 ,加 是加上根節這一層。 如果既有左子樹又有右子樹,那么樹的深度應該是左 右子樹中深度較大的值再加 二 非遞歸方法 思路 采用層次遍歷的方法,類似bfs的解法 每遍歷一層,depth 每一層,需使用一個變量len記錄該層的結點個數,也就 ...
2017-11-24 19:29 0 5496 推薦指數:
轉載:http://www.cnblogs.com/GoAhead/archive/2012/05/22/2513847.html 二叉樹的深度,遞歸和非遞歸實現 遞歸實現基本思想: 為了求得樹的深度,可以先求左右子樹的深度 ...
在上一篇博客中,實現了Java中二叉樹的四種遍歷方式的遞歸實現,接下來,在此實現Java中非遞歸實現二叉樹的前序、中序、后序、層序遍歷,在非遞歸實現中,借助了棧來幫助實現遍歷。前序和中序比較類似,也簡單一些,但是后序遍歷需要兩個棧來進行輔助,稍微復雜一些,層序遍歷中借助了一個隊列來進行實現 ...
遞歸實現基本思想: 為了求得樹的深度,可以先求左右子樹的深度,取二者較大者加1即是樹的深度,遞歸返回的條件是若節點為空,返回0 算法: 非遞歸實現基本思想: 受后續遍歷二叉樹思想的啟發,想到可以利用后續遍歷的方法來求二叉樹的深度,在每一次輸出的地方替換成算棧S的大小 ...
在這里看到了這個題。層次遍歷是用隊列,一級一級地入隊列然后輸出。而用遞歸的話,我首先想到是用兩個棧來模擬隊列,在遞歸遍歷二叉樹的過程中入棧,然后最后一次性出棧。但仔細思考后發現無法做到層次遍歷。在這里看到了正確的方法。 主要代碼如下: 這個算法先 ...
二叉樹的遞歸很簡單,但是非遞歸就有點復雜了。 第一種先序遍歷、中序遍歷、第一種后序遍歷都是一直將左子樹壓入棧,其中先序遍歷和中序遍歷輸出位置不同,后序遍歷則需要前驅標記pre來判斷右孩子是否訪問過; 第二種先序遍歷和第二種后序遍歷是根據層序遍歷的思想寫的,將隊列換成棧,順序換成先入右孩子再入左 ...
二叉樹中又有二叉樹,也就是遞歸。因此使用遞歸創建二叉樹是最簡單的。思路很簡單:我們申明一個結構體TREENODE,該結構體有三個成員,分別是Value,LeftChild和RightChild。 代碼如下: typedef struct _struct_tree_node ...
二 叉樹是一種非常重要的數據結構,很多其它數據結構都是基於二叉樹的基礎演變而來的。對於二叉樹,有前序、中序以及后序三種遍歷方法。因為樹的定義本身就是 遞歸定義,因此采用遞歸的方法去實現樹的三種遍歷不僅容易理解而且代碼很簡潔。而對於樹的遍歷若采用非遞歸的方法 ...