擴展先序遍歷算法實現(xiàn)
用二叉鏈表做為存儲結(jié)構(gòu),先序遍歷算法可描述為:
void InOrder(BinTree T)
{ //算法里①~⑥是為了說明執(zhí)行過程加入的標號
① if(T) { // 如果二叉樹非空
② printf("%c",T->data); // 訪問結(jié)點 ③ InOrder(T->lchild); ④ InOrder(T->rchild); ⑤ }
⑥ } // InOrder
void createBiTree(BiTree *bt){
char ch;
ch = getchar();
if(ch == '.')
*bt = NULL;
else{
*bt = (BiTree)malloc(sizeof(BiTNode));//向內(nèi)存申請節(jié)點空間
(*bt)->data = ch;
createBiTree(&((*bt)->LChild));//生成左子樹
createBiTree(&((*bt)->RChild));//生成右子樹
}
}/*createBiTree*/
/*==================打印二叉樹=============*/
void printTree(BiTree bt,int nLayer){
int i;
if(bt == NULL)
return ;
printTree(bt ->RChild,nLayer+1);
for(i=0;i<nLayer;i++)
printf(" ");
printf("%c\n",bt->data);
printTree(bt->LChild,nLayer+1);
}
圖一:
(a)1 2 4 . . 6 . . 3 . 5 . 7 . 8 . .
(b)1 2 4 . . 5 . . 3 6 . . 7 . . 運行結(jié)果:
圖二:
(a)7 3 1 . . 2 . . 9 . 10 . 8 . 4 . .
(b)7 3 1 . . 5 4 . . . 11 10 . . 15 . .
運行結(jié)果:
在使用擴展先序遍歷創(chuàng)建二叉樹時,首先要根據(jù)一棵二叉樹寫出它的先序遍歷序列,然后根據(jù)圖中各個節(jié)點左右孩子的 狀況進行加點遍歷,凡是沒有左右孩子的節(jié)點,遍歷到它的左右孩子是都用"."表示它的左右孩子,注意這里面的"."只是用來表示它的父節(jié)點沒有它這個左孩子或右孩子,并不表示節(jié)點,所以在遍歷過程中應該訪問到"."就結(jié)束了,不能再沿著"."繼續(xù)遍歷。
所謂遍歷(Traversal)是指沿著某條搜索路線,依次對樹中每個結(jié)點均做一次且僅做一次訪問。訪問結(jié)點所做的操作依賴于具體的應用問 題。 遍歷是二叉樹上最重要的運算之一,是二叉樹上進行其它運算之基礎(chǔ)。本節(jié)主要講二叉樹中遍歷過程,遍歷方法,重點介紹擴展先序遍歷序列以及利用此序列創(chuàng)建二叉樹的過程,順便比較一下各種遍歷方法的異同和應用。
從二叉樹的遞歸定義可知,一棵非空的二叉樹由根結(jié)點及左、右子樹這三個基本部分組成。因此,在任一給定結(jié)點上,可以按某種次序執(zhí)行三個操作:
(1)訪問結(jié)點本身(N),
(2)遍歷該結(jié)點的左子樹(L),
(3)遍歷該結(jié)點的右子樹(R)。
根據(jù)遍歷的原則:先左后右,對于先序遍歷,顧名思義就是先訪問根節(jié)點,再訪問左子樹,最后訪問右子樹,
從二叉樹的遞歸定義可知,一棵非空的二叉樹由根結(jié)點及左、右子樹這三個基本部分組成。因此,在任一給定結(jié)點上,可以按某種次序執(zhí)行三個操作:
(1)遍歷該結(jié)點的左子樹(L),
(2)訪問結(jié)點本身(N),
(3)遍歷該結(jié)點的右子樹(R)。
對于中序遍歷,就是先訪問左子樹,再訪問根節(jié)點,最后訪問右子樹;
從二叉樹的遞歸定義可知,一棵非空的二叉樹由根結(jié)點及左、右子樹這三個基本部分組成。因此,在任一給定結(jié)點上,可以按某種次序執(zhí)行三個操作:
(1)遍歷該結(jié)點的左子樹(L),
(2)遍歷該結(jié)點的右子樹(R)。
(3)訪問結(jié)點本身(N),
對于后序遍歷,就是先訪問左子樹,再訪問右子樹,最后訪問根節(jié)點;
根據(jù)訪問結(jié)點操作發(fā)生位置命名:
① NLR:前序遍歷(PreorderTraversal亦稱(先序遍歷))
--訪問根結(jié)點的操作發(fā)生在遍歷其左右子樹之前。
② LNR:中序遍歷(InorderTraversal)
--訪問根結(jié)點的操作發(fā)生在遍歷其左右子樹之中(間)。
③ LRN:后序遍歷(PostorderTraversal)
--訪問根結(jié)點的操作發(fā)生在遍歷其左右子樹之后。
第一步:菱形斜填寫 第二步:菱形四角的3和7,1和9交換,如下圖 第三步:9和1插隊進去,如圖先將1—9九個數(shù)按如下圖排列14 b 27 c 5 a 38 d 69然后將a用7代替,同理1換d,3...
短跑的就是計算150厚度,按其水平投影面積計算,包含一半的梯井調(diào)出的板應該是單獨計算,計入在挑檐板中吧
一般都是300寬 3MM厚,這樣每米重量為0.3*3*7.85=7.065kg,這樣一噸為1000/7.065=141m
格式:pdf
大?。?span id="uajgmi1" class="single-tag-height">104KB
頁數(shù): 3頁
評分: 3
等效焓降擴展算法的比較和聯(lián)合應用——等效焓降法用于分析熱力系統(tǒng)、計算熱經(jīng)濟性指標時,十分簡便、迅速,而且運算結(jié)果準確,所以應用也很廣泛。面對熱力系統(tǒng)中不同的問題和要求,我國學者在等效焓降法的基礎(chǔ)上,提出了很多不同的改進算法。與等效焓降法相比,它們在...
格式:pdf
大小:104KB
頁數(shù): 17頁
評分: 4.7
實用標準 文案大全 實 驗 報 告 ( 2015 / 2016 學年 第二學期) 課程名稱 數(shù)據(jù)結(jié)構(gòu) A 實驗名稱 內(nèi)排序算法的實現(xiàn)以及性能比較 實驗時間 2016 年 5 月 26 日 指導單位 計算機科學與技術(shù)系 指導教師 駱健 學生姓名 耿宙 班級學號 B14111615 學院 (系) 管理學院 專 業(yè) 信息管理與信息系統(tǒng) 實用標準 文案大全 實習題名 :內(nèi)排序算法的實現(xiàn)及性能比較 班級 B141116 姓名 耿宙 學號 B14111615 日期 2016.05.26 一、 問題描述 驗證教材的各種內(nèi)排序算法, 分析各種排序算法的時間復雜度; 改進教材中的快速 排序算法,使得當子集合小于 10個元素師改用直接插入排序;使用隨即數(shù)發(fā)生器產(chǎn)生 大數(shù)據(jù)集合, 運行上述各排序算法, 使用系統(tǒng)時鐘測量各算法所需的實際時間, 并進行 比較。系統(tǒng)時鐘包含在頭文件“ time.h
樹中節(jié)點結(jié)構(gòu)為:
核心代碼:
· Preorder前序遍歷--訪問結(jié)點的操作發(fā)生在遍歷其左右子樹之前
· Inorder中序遍歷--訪問結(jié)點的操作發(fā)生在遍歷其左右子樹之間
· Postorder后序遍歷--訪問結(jié)點的操作發(fā)生在遍歷其左右子樹之后
· Level order層次遍歷--按每一層的節(jié)點,從左到右逐次訪問
樹的遍歷是樹的一種重要的運算。所謂遍歷是指對樹中所有結(jié)點的系統(tǒng)的訪問,即依次對樹中每個結(jié)點訪問一次且僅訪問一次。樹的3種最重要的遍歷方式分別稱為前序遍歷、中序遍歷和后序遍歷。以這3種方式遍歷一棵樹時,若按訪問結(jié)點的先后次序?qū)⒔Y(jié)點排列起來,就可分別得到樹中所有結(jié)點的前序列表,中序列表和后序列表。相應的結(jié)點次序分別稱為結(jié)點的前序、中序和后序。
樹的這3種遍歷方式可遞歸地定義如下:
§ 如果T是一棵空樹,那么對T進行前序遍歷、中序遍歷和后序遍歷都是空操作,得到的列表為空表。
§ 如果T是一棵單結(jié)點樹,那么對T進行前序遍歷、中序遍歷和后序遍歷都只訪問這個結(jié)點。這個結(jié)點本身就是要得到的相應列表。
§ 否則,設(shè)T如圖6所示,它以n為樹根,樹根的子樹從左到右依次為T1,T2,..,Tk,那么有:
§ 對T進行前序遍歷是先訪問樹根n,然后依次前序遍歷T1,T2,..,Tk。
§ 對T進行中序遍歷是先中序遍歷T1,然后訪問樹根n,接著依次對T2,T2,..,Tk進行中序遍歷。
§ 對T進行后序遍歷是先依次對T1,T2,..,Tk進行后序遍歷,最后訪問樹根n。