非遞迴遍歷就是迭代遍歷
模擬的就是遞迴中的過程,**比遞迴略微複雜
//非遞迴前序遍歷
public
static
void
prordernor
(treenode root)
//獲取棧頂元素
curnode = st.
pop();
//訪問棧頂元素的右子樹
curnode = curnode.right;
} system.out.
println()
;}
根左右的順序,進行壓棧
public
static
void
inordernor
(treenode root)
//訪問根
curnode = st.
pop();
system.out.
print
(curnode.value +
" ")
;//訪問右子樹
curnode = curnode.right;
} system.out.
println()
;}
左根右進行壓棧,與前序基本相同
重點是後序遍歷,需要乙個前驅節點進行標記
public
static
void
postordernor
(treenode root)
//根: 訪問完右子樹之後,才能訪問根
//curnode = st.pop(); 有可能導致元素訪問不到
curnode = st.
peek()
;//判斷右子樹是由已經訪問完:
// 1. curnode.right == null : 沒有右子樹
// 2. curnode.right == prev: 有右子樹,並且右子樹的根上一次已經訪問結束,即右子樹訪問完成
if(curnode.right == null || curnode.right == prev)
else
} system.out.
println()
;}
而且左子樹遍歷完後不能直接進行右邊,因為要判斷右邊是否是空,也要判斷右邊是否是上次遍歷過了,如果遍歷過了就直接輸出根了 二叉樹前中後遍歷
最近做題的時候經常碰見二叉樹的題,這次來個完整的遍歷順序,一勞永逸遍歷的方法有 層序遍歷 先序遍歷 中序遍歷 後序遍歷等,以下面的二叉樹為例介紹遍歷 e b f a d h c g i k j1.層序遍歷 即從上到下按層次訪問該樹,每一層單獨輸出一行,每一層要求訪問的順序為從左到右。例子中層序遍歷為...
二叉樹前序遍歷(遞迴以及非遞迴)
對於一種資料結構而言,我們最常見的就是遍歷,那麼關於二叉樹我們該如何去遍歷呢?請看大螢幕 上圖是一棵二叉樹,前序遍歷結果 1 2 4 5 3 6 咦,我想你可能會疑惑什麼叫做前序遍歷,其實很簡單,就是按照 根 左 右 的方式去遍歷二叉樹。definition for a binary tree no...
重建二叉樹 前中遍歷 後中遍歷
乙個二叉樹的遍歷序列不能決定一棵二叉樹,但某些不同的遍歷序列組合可以唯一確定一棵二叉樹。給定一棵二叉樹的前序遍歷序列和中序遍歷序列可以唯一確定一棵二叉樹的結構,給定一棵二叉樹的後序遍歷序列和中序遍歷序列也可以唯一確定一棵二叉樹的結構。注意 這還有乙個條件 二叉樹的任意兩個結點的值都不相同。一.根據前...