飛機票訂票系統
二〇一四年六月
二叉數的遍歷
1、問題陳述
二叉樹的中序、前序、後序的遞迴、非遞迴遍歷演算法,層次序的非遞迴遍歷演算法的實現,應包含建樹的實現。(限1 人完成)
二叉樹的前序、後序的遞迴、非遞迴遍歷演算法,層次序的非遞迴遍歷演算法的實現,應包含建樹的實現。
先序遍歷二叉樹演算法:若二叉樹為空,則空操作;否則(1)訪問根結點;(2)先序遍歷左子樹;(3)先序遍歷右子樹。
中序遍歷二叉樹演算法:若二叉樹為空,則空操作;否則(1)中序遍歷左子樹;(2)訪問根結點;(3)中序遍歷右子樹。
後序遍歷二叉樹演算法:若二叉樹為空,則空操作;否則(1)後序遍歷左子樹;(2)後序遍歷右子樹;(3)訪問根結點。
2、程式**:
#include
#include<>
#include<>
using namespace std;
#define maxsize 100
#define len sizeof(struct btree)
int max=1;
typedef struct btree//二叉樹節點結構體
*binode;
typedef struct stackelemtype//棧的結構體
stackelemtype;
binode p;
//二叉樹的建立
binode stree_creat(char*a,int k)
}void print( binode root)//輸出所建二叉樹
; int top=0,base=0,j=0,k=0,n=0,m=0;
h[top]=root;
j=log(max+1)/log(2)-1;
if(pow(2,j+1)-1 cout<<"你剛輸入的是:\n";
while(h[base]!=null)//把二叉樹的值依次存入陣列
for(top=0;h[k]!=null;top++)//按層輸出
cout<<"\n";
for(n=0;n<(m-1);n++)
cout<<" ";
for(base=0;base cout<<"/"<<"|";
cout<<"\n";
}}//二叉樹的前序遞迴遍歷演算法
void preorder(binode root)
}//二叉樹的前序遍歷非遞迴演算法
void f_preorder(binode root)
if(top>0)//當節點為空但棧頂不為零
}while(root!=null||top>0);
}//二叉樹的中序遍歷演算法
void inorder(binode root)
}//中序非遞迴遍歷演算法
void f_inorder(binode root)
if(top>0)//當節點為空但棧頂不為零時
}while(root!=null||top>0);
} //二叉樹的後序遍歷遞迴演算法
void postorder(binode root)
} //後序非遞迴遍歷演算法
void f_postorder(binode root)
while(s[top-1].flag==1)
if(top>0)
}while(top>0);
}//層次序列遍歷演算法
void leveorder(binode root)
for(i=0;i
}//輸入二叉樹的資訊的函式
binode creat()
{ binode p=null;
cout<<"請輸入你的二叉樹(請按層次由上往下從左往右依次輸入並按#結束,如果節點為空請輸入'0',本遍歷僅支援單字元),輸入為:\n";
二叉樹遍歷技巧
二叉樹先根序 後根序 中根序遍歷的速演算法 解題技巧 經過研究我找出了一種不用畫圖,由先 後 根序遍歷和中根序遍歷迅速確定遍歷結果的辦法。謹以此文獻給智商與我同級而又不得不研究演算法的朋友。抽象思維太差,用例子來說明吧。下面這個是後根遍歷的演算法。例1 已知某二叉樹的先根序遍歷為abcdefg,中根...
非遞迴遍歷二叉樹
遍歷二叉樹的非遞迴演算法 編寫的方法 根據樹中結點的遍歷規律及順序直接寫出其非遞迴演算法。先序非遞迴演算法 思路 假設 t是要遍歷樹的根指標,若t null 對於非遞迴演算法,引入棧模擬遞迴工作棧,初始時棧為空。問題 如何用棧來儲存資訊,使得在先序遍歷過左子樹後,能利用棧頂資訊獲取t的右子樹的根指標...
3最優二叉樹
計算機演算法的設計與分析實驗報告 1 描述 在權為wl,w2,wn的n個葉子所構成的所有二叉樹中,帶權路徑長度最小 即代價最小 的二叉樹稱為最優二叉樹或哈夫曼樹。例 給定4個葉子結點a,b,c和d,分別帶權7,5,2和4。構造如下圖所示的三棵二叉樹 還有許多棵 它們的帶權路徑長度分別為 a wpl ...