一、 遞歸的方法 思路: 我們可以從另一個角度來理解樹的深度: 如果一棵樹只有一個結點,那么它的深度為1; 如果根結點只有左子樹沒有右子樹,那么樹的深度是左子樹的深度加1,加1是加上根節這一層。 如果既有左子樹又有右子樹,那么樹的深度應該是左、右子樹中深度較大的值再加 ...
遞歸實現基本思想: 為了求得樹的深度,可以先求左右子樹的深度,取二者較大者加 即是樹的深度,遞歸返回的條件是若節點為空,返回 算法: 非遞歸實現基本思想: 受后續遍歷二叉樹思想的啟發,想到可以利用后續遍歷的方法來求二叉樹的深度,在每一次輸出的地方替換成算棧S的大小,遍歷結束后最大的棧S長度即是棧的深度。 算法的執行步驟如下: 當樹非空時,將指針p指向根節點,p為當前節點指針。 將p壓入棧S中, 壓 ...
2012-05-22 20:57 0 28916 推薦指數:
一、 遞歸的方法 思路: 我們可以從另一個角度來理解樹的深度: 如果一棵樹只有一個結點,那么它的深度為1; 如果根結點只有左子樹沒有右子樹,那么樹的深度是左子樹的深度加1,加1是加上根節這一層。 如果既有左子樹又有右子樹,那么樹的深度應該是左、右子樹中深度較大的值再加 ...
再反回,這不禁讓人聯想到棧,而想要實現二叉樹的非遞歸遍歷,就需要用棧的思想來實現 先序遍歷(DLR) ...
二叉樹的遍歷方式: 1、深度優先:遞歸,非遞歸實現方式 1)先序遍歷:先訪問根節點,再依次訪問左子樹和右子樹 2)中序遍歷:先訪問左子樹,再訪問根節點嗎,最后訪問右子樹 3)后序遍歷:先訪問左子樹,再訪問右子樹,最后訪問根節點 2、廣度優先 按照樹的深度,一層 ...
通過遞歸算法與非遞歸算法的比較,更好地理解各自的特點。非遞歸其實就是調用棧的基本操作,進棧,出棧等。 這里面也正好復習了下棧的基本算法的實現。 棧和隊列的實現在我的前一篇博文里。 基本數 ...
...
遍歷二叉樹可以用遞歸的方法去實現,也可以用非遞歸的方法去實現。遞歸代碼的好處是簡潔,直觀,最主要的還是遞歸的代碼少,很快就可以寫完。但我們知道,遞歸的調用會用到一個專門的棧,這個棧的深度是有限的,如果遞歸函數調用的次數很多,超過棧限制的深度,那么程序就會崩潰。這個時候就需要把遞歸的代碼改為非 ...
這篇文章用來復習AVL的平衡操作,分別會介紹其旋轉操作的遞歸與非遞歸實現,但是最終帶有插入示例的版本會以遞歸呈現. 下面這張圖繪制了需要旋轉操作的8種情況.(我要給做這張圖的兄弟一個贊)后面會給出這八種情況對應平衡實現. [1] 情況1-2: 這種需要旋轉的結構 ...
最近在刷leetcode時,刷到了二叉樹中序遍歷的題目,所以特在此記錄一下,下面我將給出中序遍歷的遞歸實現和非遞歸(迭代)實現的代碼與算法思想: 1. 中序遍歷的遞歸實現: 遞歸實現的算法思想:先中序遍歷左子樹,然后訪問根節點,最后訪問右子樹。 2. 中序遍歷的非遞歸 ...