二叉樹的遞迴與非遞迴遍歷 Java描述

2021-06-16 05:33:41 字數 1911 閱讀 1100

構造樹如下:

其中二叉樹節點類

/** 二叉樹節點 */

public

class

btnode

public

btnode(

char

key, btnode left, btnode right)

public

char

getkey()

public

void

setkey(

char

key)

public

btnode getleft()

public

void

setleft(btnode left)

public

btnode getright()

public

void

setright(btnode right) }

遍歷二叉樹

/** 二叉樹遍歷 */

public

class

bintree

public

btnode getroot()

/** 構造樹 */

public

static

btnode init()

/** 訪問節點 */

public

static

void

visit(btnode p)

/** 遞迴實現前序遍歷 */

protected

static

void

preorder(btnode p)

}/** 遞迴實現中序遍歷 */

protected

static

void

inorder(btnode p)

}/** 遞迴實現後序遍歷 */

protected

static

void

postorder(btnode p)

}/** 非遞迴實現前序遍歷 */

protected

static

void

iterativepreorder(btnode p) }}

/** 非遞迴實現後序遍歷 */

protected

static

void

iterativepostorder(btnode p)

// 處理右子

stack.push(p);

p = p.getright();}}

/** 非遞迴實現中序遍歷 */

protected

static

void

iterativeinorder(btnode p)

p = stack.pop();

while

(!stack.empty() && p.getright() == 

null

) visit(p);

if(!stack.empty())

p = stack.pop();

else

p = 

null;}

}public

static

void

main(string args) }

輸出結果

pre-order:h d b a c g f e 

in-order:b a d c h g e f 

post-order:a b c d e f g h 

pre-order:h d b a c g f e 

in-order:b a d c h g e f 

post-order:a b c d e f g h 

本文出自 「子 孑」 部落格,請務必保留此出處

二叉樹的遞迴遍歷與非遞迴遍歷

二叉樹的遞迴遍歷與非遞迴遍歷 include include include 本程式實現二叉樹的建立,遞迴遍歷與非遞迴遍歷 typedef struct tnode tnode,pnode 構造二叉樹 pnode createtree else pnode data data pnode lchil...

二叉樹的遞迴遍歷與非遞迴遍歷

二叉樹的遍歷有遞迴與非遞迴兩種方式,但思想大致相同 前序 先列印然後遍歷完他的左子樹,左子樹為空時開始返回,並且開始以棧中元素為根遍歷右子樹 中序 先遍歷左子樹然後左子樹入棧,左子樹為空再列印,再遍歷右子樹 後序 先遍歷完左子樹,左子樹入棧儲存,再遍歷右子樹,遍歷完列印,否則繼續入棧 遞迴遍歷 遞迴...

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

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