二叉樹的遞迴非遞迴遍歷

2021-08-08 16:55:07 字數 1063 閱讀 5224

二叉樹的遍歷一直是常考題,遍歷可以使用遞迴方法也可以使用非遞迴方法。首先先看下遞迴方法。

public class node

//後序遍歷

public void posorder(node head)

下面看下非遞迴實現;

非遞迴方式實現二叉樹的前序遍歷。借助棧來實現。

1,申請乙個棧,記為s,將頭結點head壓入棧中;

2,從s中彈出棧頂元素,記為cur,然後列印cur的值,再將cur的右孩子結點壓入棧(如果不為空的話),再將cur的左孩子壓入棧(如果不為空的話);

3,不斷重複步驟2,直到棧空,全部過程結束。

public void preorderunrecur(node head)

}system.out.println();

非遞迴實現二叉樹的中序遍歷:

1,首先要先建立乙個棧,記為s,初始令變數cur=head;

2,先把cur壓入棧,對cur結點為頭的整棵樹,依次把左邊界壓入棧,不停的cur=cur.left;

3,不停的重複步驟2,直到發現cur為null,此時從棧中彈出乙個節點,記為node,列印node的值,並讓cur=node.right;重複步驟2;

4,當s為空切cur為空時候,整個過程停止。

public void inorderunrecur(node head)

}system.out.println();

非遞迴實現二叉樹的後序遍歷

後序遍歷有點麻煩,這個時候我們可以建立連個棧來實現。

1,申請乙個棧,記為s1,然後將head節點壓入s1中;

2,從s1中彈出的節點記為cur,然後依次將cur的左孩子和右孩子壓入s1中;

3,在整個過程中,每乙個從s1中彈出的節點都放進s2中;

4,不斷重複步驟2,3,直到s1為空,過程停止;

5,從s2中依次彈出節點並列印,列印順序就是後序遍歷的順序。

public void posorderunrecur(node head)

while(!s2.isempty())

system.out.println();

}

二叉樹遍歷(遞迴 非遞迴)

二叉樹以及對二叉樹的三種遍歷 先根,中根,後根 的遞迴遍歷演算法實現,以及先根遍歷的非遞迴實現。node public class node public node left public node right public object value 遍歷訪問操作介面 public inte ce ...

二叉樹的遞迴 非遞迴遍歷

二叉樹的遍歷 2011.8.25 出處 二叉樹的非遞迴遍歷 二叉樹是一種非常重要的資料結構,很多其它資料結構都是基於二叉樹的基礎演變而來的。對於二叉樹,有前序 中序以及後序三種遍歷方法。因為樹的定義本身就是遞迴定義,因此採用遞迴的方法去實現樹的三種遍歷不僅容易理解而且 很簡潔。而對於樹的遍歷若採用非...

二叉樹的非遞迴遍歷(遞迴和非遞迴)

二 叉樹是一種非常重要的資料結構,很多其它資料結構都是基於二叉樹的基礎演變而來的。對於二叉樹,有前序 中序以及後序三種遍歷方法。因為樹的定義本身就是 遞迴定義,因此採用遞迴的方法去實現樹的三種遍歷不僅容易理解而且 很簡潔。而對於樹的遍歷若採用非遞迴的方法,就要採用棧去模擬實現。在三種遍歷中,前序和中...