#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 ...