在度為4的樹中,若有20個度為4的節點,10個度為3的節點,1個度為2的節點,10個度為1的節點,則樹t的葉節點個數是?這道題是2023年計算機聯考真題。我用手算(半蠻力)解出答案是82,結果是對的,但是耗時較長,而且如果數字再大點也不好算了,因此肯定存在一種更加高效的方法。
我們知道,
於是樹的節點個數n = 1 + 20*4 + 10*3 + 1*2 + 10*1
但同時,樹的節點個數也可以寫成是:葉子節點數+度為1的節點數+…+度為4的節點數
即n = n0 + 20 + 10 + 1 + 10
,其中n0為葉子節點個數
由上述兩個式子就可解出葉子節點個數為82了。
這個方法解題效率比半蠻力法高多了,而且更準確
設二叉樹有2n個節點,且該題有兩種演算法。m這道題涉及到的知識為:
的節點的數量為設度為i
ni
,則2n = n0 + n1 + n2
又因
n0 = n2 + 1
,故2n = n1 + 2n2 + 1
因此可以推算出
n1 = 2n - 2n2 -1
,必為奇數,由此直接判斷本題選c【2023年計算機聯考真題】若一顆完全二叉樹有768個結點,則該二叉樹葉節點個數為?
演算法一:
因此該完全二叉樹最後乙個數值結點的編號為768/2=384
(從1開始編號),所以葉子節點個數為768-384=384
演算法二:
設n
為二叉樹總節點數,ni
為 度為i
的節點數
n = n0 + n1 + n2
,n0 = n2 + 1
,即n = n1 + 2n2 + 1
因此768 = n1 + 2n2+1,而n1只能等於0或1(完全二叉樹中)
所以可以解出n1 = 1,n2 = 383,所以n0 = n2+1=384
已知一棵有2011個結點的樹,其葉結點個數是11個,該樹對應的二叉樹中無右孩子的結點的個數是?需要注意的是樹轉換為二叉樹時,是左孩子右兄弟,上述部落格中有筆誤。
在二叉樹中有兩個結點m和n,如果m是n的祖先,可以找到從m到n的路徑的遍歷方式是?這道題想了我很久,答案是後序遍歷似乎有點難以理解,試想先序遍歷、中序遍歷、層次遍歷都會遍歷到m和n啊,層次遍歷和路徑無關,自然不選,但是先序和中序為何不行?
這就得先看清楚,題目中所寫為m是n的祖先,祖先可不僅僅只能是父節點。如果是父節點,那麼不管哪一種都好說。而祖先的話,試想 n是m的第18代兒子,假設又是滿二叉樹,天吶,從記錄下m開始到找到n,中間可能性有多少?2的18次方種可能,顯然全部記錄下來然後從中選乙個是不現實的吧,所以從上往下找,這種思路本就是不可行的。(沒說清楚?和這個問題很像,可以參考:戳)打個更簡單的比方,乙個皇帝想從幾十億的人中找到你是很難的,但是你想找那個皇帝,卻是很簡單的。
而既然排除了從上往下,也就排除了先序和中序,那後序為什麼可以呢?因為後序遍歷,無論是在左子樹還是右子樹,在返回的路上,都必然會經過祖先節點,所以,不管是不是遞迴的方法,都可以找得到這條路徑。
非遞迴求解該問題的偽**見第八題,只要從棧中提出n,則棧裡面剩下的就是從根節點到n的路徑節點。
線索二叉樹是一種( )結構?答案選c,解題方案見:該題題解a. 邏輯
b. 邏輯和儲存
c. 物理
d. 線性
()的遍歷仍需要棧的支援這是一道很簡單的題目,顯然選c,因為後序線索樹可能不能根據線索找到直接後繼節點。a. 前序線索樹
b. 中序線索樹
c. 後序線索樹
d. 所有線索樹
這裡小結一下:
編寫後序遍歷二叉樹的非遞迴演算法後序遍歷二叉樹,如果使用遞迴很簡單,就三五句話
void postorder(bitree t)
}
但是使用非遞迴演算法,後序遍歷是最麻煩的一種了,**如下:
void postorder(bitree t)
else
else}}
}
請畫圖理解上述**。且上述**適用於其他情況。
當訪問乙個節點*p
時,棧裡節點恰好是*p
節點的所有祖先。這構成了從根節點到*p
節點的一條路徑,因此本演算法可以求最短路徑、兩個節點的最近公共祖先等。
含有二十個節點的平衡二叉樹的最大深度為()這道題涉及到的就是平衡二叉樹裡的乙個規律:a. 4 b. 5 c. 6 d. 7
所以這道題很明顯了,n0 = 0, n1 = 1, n2 = 2, n3 = 4, n4 = 7, n5 = 12, n6 = 20
所以選c
畫出乙個二叉樹,使它既滿足大根堆的要求又滿足二叉排序樹的要求
最大堆是堆的兩種形式之一。而且,大根堆還要求樹是完全二叉樹。根結點(亦稱為堆頂)的關鍵字是堆裡所有結點關鍵字中最大者,稱為大根堆,又稱最大堆(大頂堆)。
大根堆要求根節點的關鍵字既大於或等於左子樹的關鍵字值,又大於或等於右子樹的關鍵字值。
資料結構老師沒教過堆排序的弱渣飄過
然後就很簡單了,首先,根節點比左右節點都大,而且二叉排序樹要求根節點比右節點小,那麼沒有右節點就得了。然後因為又要求必須是完全二叉樹,所以這棵樹只能有兩個節點,乙個根節點,乙個是根節點的左節點。
所以這棵樹是唯一的!!!
本以為是唯一的,但是經道友指點,還可以是只有乙個根節點的情況,那麼就是這兩種情況啦!
考研資料結構
一 考研中的變數型別 1 基本型別 int float char 2 指標型別 3 結構體型 陣列,結構體 4 void型 考研中 定義無返回值函式。二 控制語句 1 判斷語句if 做決策 2 迴圈語句 做重複的事 for while 講講break與continue break結束整個迴圈 con...
筆試總結 資料結構篇 持續更新
1.單鏈表的沒個節點都具有唯一的前驅節點和唯一的後繼節點,所以當兩個單鏈表存在相交的節點時,這兩個鍊錶則同時擁有這個節點,以及這個節點的所有後繼節點,當這個公共節點是尾節點時,他們則只含有公共乙個節點 尾節點。2.快慢指標是判斷單鏈表是否有環的一種方法 兩個指標,每次移動的步長為2叫做快指標,每次移...
C 資料結構基本演算法 持續更新
測試快排 public static void testquicksort quicksort data,0,data.length 1 1防止下標越界 for int i 0 i data.length i 快速排序 public static void quicksort int dataarr...