面試集錦(六)資料結構(2)

2021-09-24 08:38:45 字數 890 閱讀 6505

二叉樹面試

資料結構:資料域+左子節點指標+右子節點指標

遍歷:前序遍歷,中序遍歷,後續遍歷(使用遞迴,結束條件為根節點為空,只是遞迴的順序不同)

層次遍歷:分層遍歷二叉樹(按層次從上到下,從左到右)迭代,相當於廣度優先搜尋,使用佇列實現。佇列初始化,將根節點壓入佇列。當佇列不為空,進行如下操作:彈出乙個節點,訪問,若左子節點或右子節點不為空,將其壓入佇列。

常見演算法(主要演算法都是遞迴):

(1)求二叉樹的節點個數(遞迴)

如果二叉樹不為空,二叉樹節點個數 = 左子樹節點個數 + 右子樹節點個數 + 1

(2)求二叉樹的深度(高度)(遞迴)

如果二叉樹不為空,二叉樹的深度 = max(左子樹深度, 右子樹深度) + 1

3. 求二叉樹第k層的節點個數(遞迴)

求以root為根的k層節點數目,等價於求以root左孩子為根的k-1層(因為少了root)節點數目 加上以root右孩子為根的k-1層(因為 少了root)節點數目。

4.求二叉樹中葉子節點的個數(遞迴)

如果二叉樹為空,返回0

如果二叉樹是葉子節點,返回1

如果二叉樹不是葉子節點,二叉樹的葉子節點數 = 左子樹葉子節點數 + 右子樹葉子節點數

1.用兩個棧實現乙個佇列,並分別實現在佇列尾部插入結點和在頭部刪除結點的功能。

將幾個元素壓入其中乙個棧的時候,的確是"先進後出",但是可以將這些元素再壓入另乙個棧,這樣就可以將最後乙個元素,也就是先壓入的元素放在棧頂,也就是"先進先出"了。

stackstack = new stack();

入棧:stack.push()。 出棧:stack.pop(),經常使用輔助棧

二叉樹的層序遍歷

1.兩個棧模擬乙個佇列

2.三種方式列印反向鍊錶

資料結構面試整理(2)

a 0 a 1 並抽取出key.a的小數部分 然後用m乘以該小數後取整。即 h key m key a k ey a 該方法最大的優點是m的選取比除餘法要求更低。3 除法 取關鍵字被數p除后所得餘數為雜湊址 h key key modp 不太常用,因為除法的效率比乘法低,乘數相乘法更合適。4 分段疊...

資料結構 六

接著遞迴 遞迴不僅可以自己呼叫別的函式,還可以呼叫自己 求某個數的階乘,先用迴圈實現 除了迴圈,遞迴也可以實現 與迴圈不同,遞迴的思路是已經知道1 的階乘是 1,每次呼叫 f函式,只需知道比它小 1的數階乘,n只需知道 n 1的階乘,n 1只需知道 n 2的階乘 直到 1為止。同理,n 個數之和 函...

面試 資料結構

先給出定義部分和相關除錯部分 include h using namespace std struct listnode head listnode insert int v while p next null p p next p next new listnode p p next p next...