二叉樹遍歷的非遞迴實現 java版本

2021-07-04 09:08:39 字數 697 閱讀 1563

首先從訪問節點,

訪問完後將節點入棧,

如果節點有左孩子,

則變數指向左孩子重複以上順序

當左孩子為空時,則出棧,獲得棧頂元素的右孩子(所有入棧的元素及其左孩子元素都是被訪問過的),執行1-3步驟

**:

//二叉樹定義

class btree

//前序遍歷非遞迴實現

public void printpreorder(btree btree)

if(!stack.isempty())

} }

思想與前序類似,通過棧實現,不同的是把訪問節點時機放到了出棧時

中序從根節點開始先入棧,左孩子不為空則左孩子入棧

然後出棧訪問節點,再以節點的右孩子重複前面入棧操作

基本思想是入棧順序是根節點、右孩子、左孩子,這樣保重了出棧訪問時的順序

出棧時,訪問乙個節點的條件是:該節點沒有左右孩子 或者 該節點左右孩子已被訪問過(通過乙個標記標量標定);即首先判斷該節點是否有子節點,如果有,則判斷該節點的子節點是否被訪問過,如果子節點沒有訪問則應讓子節點入棧(保重根節點後續訪問嘛);否則,沒有子節點或子節點已被訪問過時可以出棧訪問該節點

public void printpostorder(btree btree)

else

} }

二叉樹遞迴 非遞迴遍歷(Java實現)

遍歷是對一顆二叉樹最基本的操作,有前序遍歷 中序遍歷 後序遍歷和層次遍歷四種,都可以通過遞迴或者資料結構實現。假定葉子結構如下 static classleaf publicstring tostring 1.前序遍歷 先訪問其根節點,再訪問其左節點,最後訪問其右節點。遞迴實現 先訪問其根節點,然後...

java非遞迴實現二叉樹的遍歷

1 初始化設定乙個堆疊 2 把根節點指標入棧 3 當棧非空時,迴圈執行步驟3 1到步驟3 3 3 1 出棧取得棧頂節點,訪問該節點 3 2 若該節點的右孩子節點非空,則將該節點的右孩子節點指標入棧 3 3 若該節點的左孩子節點非空,則將該節點的左孩子節點指標入棧 4 演算法結束 步驟如下 至此,中序...

二叉樹遍歷 遞迴 非遞迴實現

先序遍歷中序遍歷 後序遍歷 根結點 左子樹 右子樹 左子樹 根子樹 右子樹 左子樹 右子樹 根結點 先序遍歷 void preorder btree t 中序遍歷 void inorder btree t 後序遍歷 void postorder btree t 遞迴 recursion 就是子程式 ...