資料結構之二叉樹的非遞迴排序

2021-10-22 18:55:43 字數 2670 閱讀 8137

方法:

1、建立乙個棧;

2、把根節點入棧;

3、取出棧頂元素,訪問這個節點;

4、把當前節點的右子樹入棧,左子樹入棧(非空);

5、回到3重複執行。

源程式:

public

static

void

preorderbyloop

(treenode root)

// 建立乙個棧

stack

stack =

newstack

<

>()

;// 把根節點入閘

stack.

push

(root)

;while

(!stack.

isempty()

)if(cur.left != null)

}}

方法:

1、建立乙個棧;

2、建立乙個引用cur,從root 出發,一路向左跑.遇到的非空節點都入棧,當cur遇到null的時候,就迴圈結束;

3、取出棧頂元素,並訪問(中序的特點就是一路往左找,遇到某個節點的左子樹為空,才能訪問根節點);

4、讓 cur指向該節點的右子樹,回到2繼續執行。

源程式:

public

static

void

inorderbyloop

(treenode root)

stack

stack =

newstack

<

>()

; treenode cur = root;

while

(true

)// 當上面迴圈結束, cur 就已經是 null

// 取出棧頂元素, 並且訪問

if(stack.

isempty()

) treenode top = stack.

pop();

system.out.

print

(top.val)

;// 讓 cur 從 top 的右子樹出發重複上述過程

cur = top.right;

}}

方法:

1、建立乙個棧;

2、搞乙個cur引用,從root出發,一路往左走,遇到非空節點就入棧,遇到空就停止;

3、棧頂元素不能立刻訪問!!得先判定一下:

a)如果棧頂的右子樹為空,那就能訪問該元素了,訪問同時出棧;

b)如果棧頂元素的右子樹前面已經訪問過了,也可以訪問該元素;

如果當前元素不能被訪問,就讓cur指向棧頂的右子樹,重複執行2。

源程式:

public

static

void

postorderbyloop

(treenode root)

// 1. 建立乙個棧

stack

stack =

newstack

<

>()

;// 2. 建立乙個引用 cur, 從 root 出發

treenode cur = root;

// 使用 prev 表示遍歷結果的前乙個元素

treenode prev = null;

while

(true

)// 4. 取出棧頂元素判斷下能不能訪問

if(stack.

isempty()

)// 此處不能直接 pop, 該節點能不能訪問還不知道呢.

// 必須是訪問了才能出棧

treenode top = stack.

peek()

;if(top.right == null || top.right == prev)

else

}}

方法:

1、先把根節點放到佇列裡;

2、進行出佇列操作,並且訪問這個節點

3、把當前節點的左子樹和右子樹再入佇列(空樹就不管了);

4、回到2繼續迴圈執行。

源程式:

public

static

void

levelorder

(treenode root)

// 建立乙個佇列

queue

queue =

newlinkedlist

<

>()

;// 把根節點入佇列

queue.

offer

(root)

;// 迴圈取佇列中的隊首元素

while

(true

)// 訪問當前節點, 直接列印

system.out.

print

(cur.val)

;// 把左右子樹入佇列

if(cur.left != null)

if(cur.right != null)

}}

資料結構 18 二叉樹(非遞迴)

二叉樹 使用非遞迴方法,建立樹 前中後序及層級遍歷樹。建立樹時,按照左子樹小於樹根,右子樹大於樹根,這樣中序遍歷就是有序表 include include 層級遍歷時,用到了queue模板類 include 前中後遍歷時,用到了stack模板類 using namespace std class n...

資料結構 二叉樹的遞迴 非遞迴遍歷

複習一下二叉樹遞迴非遞迴的先中後序遍歷 寫非遞迴後序遍歷的時候卡殼了,參考了一下網上的思路,大概有兩種,一種是標記每個節點是否有走過,如果父節點的左右子節點都標記訪問過,則可以訪問父節點 一種是定義乙個指標,指向上乙個訪問的節點,如果某父節點的右子節點為null或者是上乙個訪問的節點,則該父節點應當...

資料結構之二叉樹

在二叉樹中每個節點最多只能有兩個子節點。即左子節點和有子節點。在二叉樹中最重要的操作應當是遍歷。即按照某一順序訪問二叉樹中的每乙個節點。一般有如下幾種遍歷方法 1 前序遍歷,即先訪問根幾點,然後再訪問左子節點,最後訪問右子節點。2 中序遍歷,即先訪問左子節點,然後再訪問根節點,最後訪問右子節點。3 ...