資料結構筆記 二叉樹的應用

2021-10-10 01:48:18 字數 1553 閱讀 8948

二叉樹的基本應用

統計二叉樹葉子結點數

void leafnum(bt *t)

}}

二叉樹結點

void nodenum(bt *t)

}

二叉樹的深度

int treedepth(bt *t)

}

查詢資料元素

bt *search(bt *t,datatype x)

else return null;

}

識別符號樹與表示式
運算物件都是葉結點

運算子都是根結點

從表示式產生識別符號樹的方法

(1)讀入表示式的一部分生成相應的二叉樹,再讀入運算子,運算子與二叉樹根結點的運算子比較優先順序的高低

(a)讀入優先順序》根結點優先順序,則讀入的運算子作為根的右子樹,原來的二叉樹的右子樹成為運算子的左子樹

(b)讀入優先順序<=根結點的優先順序,則讀入運算子作為樹根,而原來二叉樹作為左子樹

(2)遇到括號,先使括號內的表示式產生一棵二叉樹,再把它的根結點連到前面已產生的而擦函式根結點的右子樹上

(3)單目運算子+,-,加運算物件0

例如-a

哈夫曼樹及其應用

哈夫曼樹的構造

(1)由給定的 n個權值構成n棵二叉樹的集合f=,其中每棵二叉樹ti中只有乙個帶權為wi的根結點,其左右子樹均空

(2)在f中選取 兩棵根結點權值最小的樹, 作為左右子樹構建乙個新的二叉樹,且讓新二叉樹的根結點的權值等於其左右子樹的根結點權值之和

(3)在f中刪去這兩棵樹,同時將新得到的二叉樹加入f中

(4)重複(2)和(3),直到f只含一棵樹為止。這棵樹就是huffman樹

哈夫曼編碼

規則:左零右一
**部分
結點定義

typedef struct htnode,*huffmantree; //動態分配陣列儲存哈夫曼樹

typedef char **huffmancode;

void huffmancoding(huffmantree &ht,huffmancode &hc,int *w,int n)

// *p = ;初始化ht中的葉結點迴圈退出時 i = n + 1;

for(;i<=m;++i,++p)

// *p = ;初始化ht中的內部結點

for(i = n+1;i<=m;++i)

}

從葉子到根逆向求赫夫曼編碼

hc = (huffmancode)malloc((n+1)*sizeof(char *));

cd = (char *)malloc(n*sizeof(char));

cd[n-1] = '\0';

for( i = 1;i<=n;++i)

free(cd);

資料結構筆記 樹 二叉樹 滿二叉樹

二叉樹滿二叉樹 樹是n n 0 個結點的有限集。結點為零的樹為空樹。任意一棵非空樹中 1.有且有乙個特定的稱為根的結點 2.當n 1時,其餘結點可分為m m 0 個互不相交的有限集,其中每乙個集合又是一棵樹,並稱為根的子樹。1.結點擁有的子樹數稱為結點的度 2.度為0的結點稱為葉結點或分支結點,除根...

資料結構 樹與二叉樹的應用

若二叉排序樹非空,則將給定值與根結點的關鍵字比較,若相等則查詢成功 若不等,則當根結點的關鍵字的值大於給定關鍵字時,在根結點的左子樹中查詢,小於時在右子樹中查詢。若二叉樹為空,直接插入 若關鍵字小於根結點,則插入左子樹 若關鍵字大於根結點,則插入右子樹 否則不必插入。依次輸入資料,並將他們插入二叉排...

資料結構 二叉樹 反轉二叉樹

include using namespace std define maxsize 1000 struct binary tree node class queue queue queue void queue push binary tree node btn binary tree node ...