第十周專案一C C 二叉樹演算法驗證

2021-08-10 20:51:27 字數 3267 閱讀 5560

/*   

*檔名稱:.cpp

*完成日期:2023年11月16日

*版 本 號:v1.0

* 二叉樹演算法驗證

/*

執行並重複測試教學內容中涉及的演算法。改變測試資料進行重複測試的意義在於,可以從更多角度體會演算法,以達到逐漸掌握演算法的程度。使用你的測試資料,並展示測試結果,觀察執行結果,以此來領會演算法。

(1)層次遍歷演算法的驗證

(2)二叉樹構造演算法的驗證 

(3)中序線索化二叉樹的演算法驗證 

(4)哈夫曼編碼的演算法驗證

第乙個:層次遍歷演算法的驗證

實現二叉樹的層次遍歷演算法,並對用」a(b(d,e(h(j,k(l,m(,n))))),c(f,g(,i)))」建立的二叉樹進行測試。

利用二叉樹演算法庫

#include #include "btree.h"

void levelorder(btnode *b)

if (p->rchild!=null) //有右孩子時將其進隊

}}int main()

注:在main函式中,建立的用於測試的二叉樹如下—— 

執行結果:

第二個:二叉樹構造演算法的驗證 

1.由先序序列和中序序列構造二叉樹

#include #include #include "btree.h"

btnode *createbt1(char *pre,char *in,int n)

/*pre存放先序序列,in存放中序序列,n為二叉樹結點個數,

本演算法執行後返回構造的二叉鏈的根結點指標*/

int main()

執行結果:

2.由後序序列和中序序列構造二叉樹

#include #include #include "btree.h"

btnode *createbt2(char *post,char *in,int n)

/*post存放後序序列,in存放中序序列,n為二叉樹結點個數,

本演算法執行後返回構造的二叉鏈的根結點指標*/

int main()

執行結果:

3.由順序儲存結構轉為二叉鏈儲存結構 

#include #include #include "btree.h"

#define n 30

typedef elemtype sqbtree[n];

btnode *trans(sqbtree a,int i)

int main()

執行結果:

第三個:中序線索化二叉樹的演算法驗證

#include #include #define maxsize 100

typedef char elemtype;

typedef struct node

tbtnode;

void createtbtnode(tbtnode * &b,char *str)}}

j++;

ch=str[j];

}}void disptbtnode(tbtnode *b)

}}tbtnode *pre; //全域性變數

void thread(tbtnode *&p)

else p->ltag=0;

if (pre->rchild==null) //後繼線索

else pre->rtag=0;

pre=p;

thread(p->rchild); //右子樹線索化

}}tbtnode *creathread(tbtnode *b) //中序線索化二叉樹

return root;

}void thinorder(tbtnode *tb)

p=p->rchild;

}}int main()

執行結果:

第四個:哈夫曼編碼的演算法驗證

#include #include #define n 50        //葉子結點數

#define m 2*n-1 //樹中結點總數

//哈夫曼樹的節點結構型別

typedef struct

htnode;

//每個節點哈夫曼編碼的結構型別

typedef struct

hcode;

//構造哈夫曼樹

void createht(htnode ht,int n)

{ int i,k,lnode,rnode;

double min1,min2;

for (i=0; i<2*n-1; i++) //所有結點的相關域置初值-1

ht[i].parent=ht[i].lchild=ht[i].rchild=-1;

for (i=n; i<2*n-1; i++) //構造哈夫曼樹

{min1=min2=32767; //lnode和rnode為最小權重的兩個結點位置

lnode=rnode=-1;

for (k=0; k<=i-1; k++)

if (ht[k].parent==-1) //只在尚未構造二叉樹的結點中查詢

{if (ht[k].weight

第十周 專案1 二叉樹演算法驗證

1 層次遍歷演算法的驗證 include include btree.h void levelorder btnode b if p rchild null 有右孩子時將其進隊 int main 2 二叉樹構造演算法的驗證 include include include btree.h btnode...

第十周專案1 二叉樹演算法驗證(2)

all rights reservrd.檔名稱 test.cpp 版本號 v1.0 問題描述 二叉樹構造演算法的驗證 問題及 利用btreee.h見 演算法庫 1.由先序序列和中序序列構造二叉樹 include include include btree.h btnode createbt1 cha...

第十周專案1 二叉樹演算法驗證(3)

all rights reservrd.檔名稱 test.cpp 版本號 v1.0 問題描述 中序線索化二叉樹的演算法驗證 問題及 利用btreee.h見 演算法庫 include include define maxsize 100 typedef char elemtype typedef st...