有關樹的幾個經典問題

2021-07-11 00:13:28 字數 975 閱讀 2898

1、假設二叉樹

n0 = x //度數為0的節點數,n1 = y //度數為1的節點數,n2 = z //度數為2的節點數

其中有關係:

n0 = n2 + 1

2、對於一棵節點數為n、度為4的樹來說那麼樹的高度至多是

但是某一層並不一定正好有4個節點,因為這和度為4並沒有必然聯絡

3、度為4,高度為h的樹,至少有h+3個節點。

原理同上一題。

4、後序線索樹的遍歷仍然需要棧的支援。

如上圖所示,後序線索樹遍歷時,最後訪問根節點。如果是從右孩子x返回訪問父節點

由於節點x的右孩子不一定為空,此時右指標無法指向其後繼,因此通過指標可能無法遍歷整棵樹

如圖中,節點中數字表示遍歷順序。

a、節點6的右指標指向其右孩子5,而不指向其後序後繼節點7

b、因此後序遍歷還需要棧的支援,而前序和中序可以不用。

5、一棵哈夫曼樹,共有215個節點,對其進行哈夫曼編碼,共有多少種不同的碼字?

n0 = n2 + 1,n0為葉子節點,n2為度為2的節點,哈夫曼樹只有度為0和度為2的節點。因此葉子節點數為 (215 + 1)/ 2 = 108 個,因此共有108種不同的編碼

6、含有20個節點的平衡

二叉樹最大深度為多少?

平衡二叉樹節點數的遞推公式為 

n0 = 0

n1 = 1

n2 = 2

n(h) = 1 + n(h-1) + n(h-2) //h為平衡二叉樹高度,n(h)為構造此平衡二叉樹所需最少節點數

由此公式得:

構造5層至少需要12個節點,構造6層需至少要20個節點。

幾個有關STL vector的問題

1,使用iterator進行遍歷和直接使用下標遍歷的區別 for vector iterator it v.begin it v.end it for int i 0 i2,如何判斷乙個vector是空的 vectorv1 v1.empty 則是返回乙個布林型變數 3,vector中元素的插入 在p...

幾個經典的博弈問題

有一種很有意思的遊戲,就是有物體若干堆,可以是火柴棍或是圍棋子等等均可。兩個 人輪流從堆中取物體若干,規定最後取光物體者取勝。這是我國民間很古老的乙個遊戲 別看這遊戲極其簡單,卻蘊含著深刻的數學原理。下面我們來分析一下要如何才能夠 取勝。一 巴什博奕 bash game 只有一堆n個物品,兩個人輪流...

有關DLL的幾個問題

一 dll被多個程序呼叫問題 win32系統會確保記憶體中只有乙個該dll的拷貝,這是通過記憶體對映檔案來實現的。不同的程序分別將這份dll的 段位址對映到自己的程序空間中,同時不同的程序在自己的程序空間分別有各自的乙份該dll的資料段拷貝。這是因為,在win32環境中,每個程序都有了它自己的位址空...