二叉樹 非遞迴遍歷(先 中 後)

2021-07-05 19:30:56 字數 1722 閱讀 3909

#include#include#include#define  maxsize  20  //最多結點個數

using namespace std;

/*二叉鍊錶*/

typedef struct bnodebnode,* btree;

/*順序棧*/

typedef btree datatype;

typedef structseqstack,* pseqstack;

pseqstack init_seqstack(void); //建空棧

void push_seqstack(pseqstack s,datatype x); //入棧

int empty_seqstack(pseqstack s); //判斷棧是否為空

void pop_seqstack(pseqstack s,datatype * y);//出棧

void destroy_seqstack(pseqstack * s); //銷毀棧

btree createbintree(void); //先序建立二叉樹

void nrpreorder(btree t); //非遞迴先序遍歷

void nrinorder(btree t); //非遞迴中序遍歷

void nrpostorder(btree t); //非遞迴後序遍歷

/*主函式*/

int main()

cout<<"\n\n非遞迴先序遍歷:";

nrpreorder(t);

cout<<"\n非遞迴中序遍歷:";

nrinorder(t);

cout<<"\n非遞迴後序遍歷:";

nrpostorder(t);

return 1;

}/******************************順序棧的一些基本操作******************************/

/*建空棧*/

pseqstack init_seqstack(void)

return s;

}/*入棧*/

void push_seqstack(pseqstack s,datatype x)else

}/*判斷棧是否為空*/

int empty_seqstack(pseqstack s)

/*出棧*/

void pop_seqstack(pseqstack s,datatype * y)else

}/*銷毀棧*/

void destroy_seqstack(pseqstack * s)

/*先序建立二叉樹*/

btree createbintree(void)

return t;

}/******************************非遞迴******************************/

void nrpreorder(btree t)else

} destroy_seqstack(&s);

}void nrinorder(btree t)else

} destroy_seqstack(&s);

}void nrpostorder(btree t)else

} while(!empty_seqstack(s1))

destroy_seqstack(&s1);

destroy_seqstack(&s2);

}

先 中 後 遞迴,非遞迴 二叉樹

import com.ccut.aaron.stack.linkedstack public class binarytree 前序遍歷非遞迴的方式 public void preordernonrecursive binarytreenode root if stack.isempty break...

二叉樹非遞迴先序遍歷

二叉樹的遞迴先序遍歷很簡單,假設二叉樹的結點定義如下 1 struct binarytreenode 2 遞迴先序遵循 根 左 右的順序 1 void preorder binarytreenode root 2非遞迴我們以乙個例子說明,仍然以之前博文的乙個二叉樹說明 1 82 36 104 55 ...

二叉樹的先 中 後 層序遍歷 (非遞迴)

二叉樹的遍歷,求高度 葉子 結點的非遞迴形式,可以在某乙個遍歷中增加一項用於統計的次數即可。1 層序遍歷 以rear走兩步 即兩個if 語句 front走一步的來遍歷,結合佇列畫圖可清晰了解遍歷思想 2void tree levertree node root else 16if p rchild ...