用棧實現遞迴(二叉樹的遍歷)

2021-07-30 18:40:18 字數 486 閱讀 7663

一、先序遍歷

public void getnodebystack(treenode node)

stack.push(node);

while(!stack.isempty())

if(treenode.left!=null)}}

直接把棧中的top節點拉出來,然後先把有節點放入棧中,再放左節點

二、中序遍歷

public void getnodebystack(treenode node)

stack.push(node);

while(!stack.isempty())

treenode.flag = false;

stack.push(treenode);//節點分解完以後要再次進棧

if(treenode.left!=null)

}else}}

中序遍歷與先序不同點是要有標誌位flag,因為節點的第一次出棧是分解成左右節點,第二次才是遍歷輸出

用棧實現二叉樹的遍歷(非遞迴)

先實現棧 include include include typedef char elemtype define stacksize 20 typedef struct st stack void init stack stack p 初始化棧 bool is empty stack p 判斷是否...

二叉樹的遍歷 (遞迴 棧)

二叉樹的遍歷可分為兩種 深度遍歷和廣度遍歷 深度遍歷又分為三種 前序 中序 後序遍歷,這三種遍歷方式可以用遞迴或棧來實現 廣度遍歷 即層序遍歷,可以用佇列來實現 以如下的二叉樹為例,遍歷該二叉樹。a.建立節點類 public class treenode b.根據二叉樹圖建立節點集合 public ...

二叉樹遍歷遞迴實現

include include define flag int define l 0 define r 1 typedef struct tree tree tree init tree int data void destroy tree tree root void insert tree t,...