樹和二叉樹2

2021-09-29 13:26:16 字數 2646 閱讀 1271

樹中結點數目

templateint bitree::count(binode* root)
葉子結點數目

templateint bitree::leafcount(binode* root)
樹的高度

templateint bitree::cal_height(bitreenode* root)
三叉鍊錶

在二叉鍊錶的基礎上增加了乙個指向雙親的指標域。

結點資料型別宣告:

templatestruct node

;

按前序擴充套件遍歷序列輸入輸入節點的值

如果輸入節點之為「#」,則建立一棵空的子樹

否則,根結點申請空間,將輸入值寫入資料域中,同時將三個指標賦空值

以相同方法的建立根節點的左子樹,並設定子樹的根的parent

以相同的方法建立根節點的右子樹,並設定子樹的根的parent

遞迴方法

template binode* bitree::creat(binode* &root ,binode*parent) 

return root;

}templatebitree::bitree( int i)

樹和二叉樹之間的對應關係

1.兄弟間加線

2.保留雙親與第一孩子連線,刪去與其他孩子的連線.

3.順時針轉動,使之層次分明.

森林轉換為二叉樹

⑴ 將森林中的每棵樹轉換成二叉樹;

⑵ 從第二棵二叉樹開始,

依次把後一棵二叉樹的根結點作為前一棵二叉樹根結點的右孩子,

當所有二叉樹連起來後,此時所得到的二叉樹就是由森林轉換得到的二叉樹。

二叉樹轉換為樹或森林

⑴ 加線——若某結點x是其雙親y的左孩子,則把結點x的右孩子、右孩子的右孩子、……,都與結點y用線連起來;

⑵ 去線——刪去原二叉樹中所有的雙親結點與右孩子結點的連線;

⑶ 層次調整——整理由⑴、⑵兩步所得到的樹或森林,使之層次分明。

哈夫曼樹:給定一組具有確定權值的葉子結點,帶權路徑長度最小的二叉樹。

哈夫曼樹的特點:

權值越大的葉子結點越靠近根結點,而權值越小的葉子結點越遠離根結點。

只有度為0(葉子結點)和度為2(分支結點)的結點,不存在度為1的結點.

哈夫曼演算法基本思想:

⑴ 初始化:由給定的n個權值構造n棵只有乙個根結點的二叉樹,從而得到乙個二叉樹集合f=;

⑵ 選取與合併:在f中選取根結點的權值最小的兩棵二叉樹分別作為左、右子樹構造一棵新的二叉樹,這棵新二叉樹的根結點的權值為其左、右子樹根結點的權值之和;

⑶ 刪除與加入:在f中刪除作為左、右子樹的兩棵二叉樹,並將新建立的二叉樹加入到f中;

⑷ 重複⑵、⑶兩步,當集合f中只剩下一棵二叉樹時,這棵二叉樹便是哈夫曼樹。

void huffmantree(element hufftree[ ], int w[ ], int n ) 

for (i=0; i線索二叉樹

二叉樹的遍歷運算是將二叉樹中結點按一定規律線性化的過程。

當以二叉鍊錶作為儲存結構時,只能找到結點的左、右孩子資訊,而不能直接得到結點在遍歷序列中的前驅和後繼資訊。

要得到這些資訊可採用以下兩種方法:

第一種方法是將二叉樹遍歷一遍,在遍歷過程中便可得到結點的前驅和後繼,但這種動態訪問浪費時間;

第二種方法是充分利用二叉鍊錶中的空鏈域, 將遍歷過程中結點的前驅、 後繼資訊儲存下來。

線索:將二叉鍊錶中的空指標域指向前驅結點和後繼結點的指標被稱為線索;

線索化:使二叉鍊錶中結點的空鏈域存放其前驅或後繼資訊的過程稱為線索化;

線索二叉樹:加上線索的二叉樹稱為線索二叉樹。

//線索鍊錶結點結構

enum flag ;

template struct thrnode

;//中序線索鍊錶類的宣告

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( )

//中序遍歷中序線索樹

template void inthrbitree::inorder(thrnode*root)

coutwhile (p->rchild!=null)

cout<}

二叉樹 滿二叉樹和完全二叉樹

二叉樹是一種很重要的非線性資料結構,它是樹結構的一種重要的型別 它不是樹結構的特殊情況 其特徵是每個節點最多有兩個子樹。二叉樹的特點 二叉樹每個結點最多有 2個子結點,樹則無此限制 二叉樹中 結點的子樹 分成左子樹和右子樹,即使某結點只有一棵子樹,也要指明該子樹是左子樹,還是右子樹,就是說 二叉樹是...

樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹

目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...

二叉樹和完全二叉樹

二叉樹規律 假設根節點的高度為0 二叉樹是每個節點至多只有兩個節點的樹 深度為i所在的層至多有 2 i個節點 高度為k的二叉樹至多有2 k 1 1個節點 n0表示度為0的節點,n2表示度為2的節點,存在n0 n2 1 對所有樹有 節點個數 邊數 1 完全二叉樹規律 節點數為n的完全二叉樹,其高度為 ...