1、三叉鍊錶
在二叉鍊錶的基礎上增加了乙個指向雙親的指標域。
2、三叉鍊錶的結點資料型別宣告
templatestruct node
;
3、樹—二叉樹
1.兄弟加線。
2.保留雙親與第一孩子連線,刪去與其他孩子的連線。
3.順時針轉動,使之層次分明。
樹的前序遍歷等價於二叉樹的前序遍歷!
樹的後序遍歷等價於二叉樹的中序遍歷!
4、森林—二叉樹
⑴ 將森林中的每棵樹轉換成二叉樹;
⑵ 從第二棵二叉樹開始,
依次把後一棵二叉樹的根結點作為前一棵二叉樹根結點的右孩子,
當所有二叉樹連起來後,此時所得到的二叉樹就是由森林轉換得到的二叉樹。
5、二叉樹—樹或森林
⑴ 加線——若某結點x是其雙親y的左孩子,則把結點x的右孩子、右孩子的右孩子、……,都與結點y用線連起來;
⑵ 去線——刪去原二叉樹中所有的雙親結點與右孩子結點的連線;
⑶ 層次調整——整理由⑴、⑵兩步所得到的樹或森林,使之層次分明。
6、森林的遍歷森林有兩種遍歷方法:
⑴前序(根)遍歷:前序遍歷森林即為前序遍歷森林中的每一棵樹。
⑵後序(根)遍歷:後序遍歷森林即為後序遍歷森林中的每一棵樹。
7、葉子結點的權值:對葉子結點賦予的乙個有意義的數值量。
9、哈夫曼樹:給定一組具有確定權值的葉子結點,帶權路徑長度最小的二叉樹。
哈夫曼樹的特點:
權值越大的葉子結點越靠近根結點,而權值越小的葉子結點越遠離根結點。
只有度為0(葉子結點)和度為2(分支結點)的結點,不存在度為1的結點.
哈夫曼演算法基本思想:
⑴ 初始化:由給定的n個權值構造n棵只有乙個根結點的二叉樹,從而得到乙個二叉樹集合f=;
⑵ 選取與合併:在f中選取根結點的權值最小的兩棵二叉樹分別作為左、右子樹構造一棵新的二叉樹,這棵新二叉樹的根結點的權值為其左、右子樹根結點的權值之和;
⑶ 刪除與加入:在f中刪除作為左、右子樹的兩棵二叉樹,並將新建立的二叉樹加入到f中;
⑷ 重複⑵、⑶兩步,當集合f中只剩下一棵二叉樹時,這棵二叉樹便是哈夫曼樹。
10、哈夫曼演算法的儲存結構
;
偽**:
1.陣列hufftree初始化,所有元素結點的雙親、左
右孩子都置為-1;
2. 陣列hufftree的前n個元素的權值置給定值w[n];
3. 進行n-1次合併
3.1 在二叉樹集合中選取兩個權值最小的根結點,
其下標分別為i1, i2;
3.2 將二叉樹i1、i2合併為一棵新的二叉樹k(初值為n;依次遞增);
void huffmantree(element hufftree[ ], int w[ ], int n )
for (i=0; i11、哈夫曼樹應用——哈夫曼編碼
字首編碼:一組編碼中任一編碼都不是其它任何乙個編碼的字首 。
字首編碼保證了在解碼時不會有多種可能。
12、線索二叉樹
線索:將二叉鍊錶中的空指標域指向前驅結點和後繼結點的指標被稱為線索;
線索化:使二叉鍊錶中結點的空鏈域存放其前驅或後繼資訊的過程稱為線索化;
線索二叉樹:加上線索的二叉樹稱為線索二叉樹。
線索二叉樹的儲存結構:線索鍊錶
;
二叉樹的遍歷方式有4種,故有4種意義下的前驅和後繼,相應的有4種線索二叉樹:
⑴ 前序線索二叉樹
⑵ 中序線索二叉樹
⑶ 後序線索二叉樹
⑷ 層序線索二叉樹
template class inthrbitree;
template thrnode* inthrbitree::creat( )
return root;
}
template void thrbitree::thrbitree (thrnode*root)
if (!root->rchild) root->rtag = thread;
if(pre != null)
pre = root;
thrbitree(root->rchild);
}
thrnode* pre = null
template inthrbitree::inthrbitree( )
13、線索鍊錶的遍歷演算法:中序遍歷中序線索樹結點後繼的確定
乙個結點的右指標如果是線索,則右指標就是下乙個要遍歷的結點,
如果右指標不是線索,則它的中序後繼是其右子樹的「最左」結點
遍歷何時停止?
乙個節點的右指標==null
二叉樹之 線索二叉樹
二叉樹是一種非線性結構,遍歷二叉樹幾乎都是通過遞迴或者用棧輔助實現非遞迴的遍歷。用二叉樹作為儲存結構時,取到乙個節點,只能獲取節點的左孩子和右孩子,不能直接得到節點的任一遍歷序列的前驅或者後繼。為了儲存這種在遍歷中需要的資訊,我們利用二叉樹中指向左右子樹的空指標來存放節點的前驅和後繼資訊 對於n個結...
樹 二叉樹 線索二叉樹
一 線索二叉樹 1 什麼是線索化 將二叉樹以某種次序將其遍歷,得到線性序列,就是將非線性結構進行線索化。線索化的優點就是可以很快地得到前驅或後繼。如果儲存線索化的線性序列 儲存二叉樹地線索化序列的其中一種方法就是在結點上加兩個指標,乙個指向前驅乙個指向後繼,這樣的缺點就是儲存密度大大降低。另一種方法...
線索二叉樹
當用二叉鍊錶作為二叉樹的儲存結構時,因為每個結點中只有指向其左 右兒子結點的指標,所以從任一結點出發只能直接找到該結點的左 右兒子。在一般情況下靠它無法直接找到該結點在某種遍歷序下的前驅和後繼結點。如果在每個結點中增加指向其前驅和後繼結點的指標,將降低儲存空間的效率。我們可以證明 在n個結點的二叉鍊...