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

2021-10-04 13:31:56 字數 2858 閱讀 5368

二叉樹的中序遍歷

二叉樹的後序遍歷

測試二叉樹的節點定義如下:

//節點

二叉樹的前序遍歷順序為:根左右。如下圖所示,前序遍歷順序為:1245367。

遞迴**:

public

static

void

preorder

(treenode root)

system.out.

print

(root.val+

" ")

;preorder

(root.left)

;preorder

(root.right)

;}

非遞迴實現主要用到了stack容器。

public

static

void

preorder2

(treenode root)

stack

stack=

newstack

<

>()

;while

(!stack.

isempty()

|| root!=null)

else

}}

二叉樹的中序遍歷順序為:左根右。如下圖所示,中序遍歷順序為:4251637 。

public

static

void

midorder

(treenode root)

midorder

(root.left)

; system.out.

print

(root.val+

" ")

;midorder

(root.right)

;}

非遞迴實現主要用到了stack容器。

public

static

void

midorder2

(treenode root)

stack

stack=

newstack

<

>()

;while

(!stack.

isempty()

|| root!=null)

else

}}

二叉樹的後序遍歷順序為:左右根。如下圖所示,中序遍歷順序為:4526731 。

public

static

void

postorder

(treenode root)

postorder

(root.left)

;postorder

(root.right)

; system.out.

print

(root.val+

" ")

;}

非遞迴實現主要用到了stack容器.

public

static

void

postorder2

(treenode root)

stack

stack=

newstack

<

>()

;//記錄前乙個輸出過的節點

treenode prenode=null;

while

(!stack.

isempty()

|| root!=null)

else

else}}

}

**:

class

treenode

}//建樹

class

tree

public

class

test

public

static treenode createtree()

//前序遍歷

public

static

void

preorder

(treenode root)

//前序遍歷 非遞迴

public

static

void

preorder2

(treenode root)

//中序遍歷

public

static

void

midorder

(treenode root)

//中序遍歷 非遞迴

public

static

void

midorder2

(treenode root)

//後續遍歷

public

static

void

postorder

(treenode root)

//後續遍歷 非遞迴

public

static

void

postorder2

(treenode root)

}

結果如下:

二叉樹遞迴遍歷和非遞迴遍歷

用遞迴和非遞迴實現二叉樹的前序遍歷 中序遍歷和後序遍歷並列印出相應結果。private class treenode 在遞迴呼叫時候系統自動給我們建立棧來儲存資料,而使用非遞迴時候需要我們自己實現棧來儲存資料。遞迴實現前序遍歷public void preorder treenode root sy...

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

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

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

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