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

zhusir發表於2018-08-22

二叉樹

二叉樹面試

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

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

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

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

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

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

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

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

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

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

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

如果二叉樹為空,返回0

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

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

佇列

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

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

Stack<string > stack = new Stack<string>();

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

二叉樹的層序遍歷

棧:

1.兩個棧模擬一個佇列

2.三種方式列印反向連結串列


相關文章