程式設計師面試題精選100題

2021-06-18 05:49:47 字數 1285 閱讀 5952

今天開始各種刷面試題,沉下心來集中時間,全身心投入

題目:輸入一棵二元查詢樹,將該二元查詢樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只調整指標的指向。

比如將二元查詢樹

10/    \

6       14

/  \     /  \

4     8  12    16

轉換成雙向鍊錶

4=6=8=10=12=14=16。

相關概念:

二元查詢樹:它首先要是一顆二元樹,在這基礎上他或者是一顆空樹,或者是具有下列3個性質的二元樹:(1)若左子樹不為空,則左子樹上所有結點的值均小於它的根結點的值;(2)若右子樹不空,則右子樹上所有結點的值均是大於他的根節點的值;(3)左右子樹也分別為二元查詢樹。

雙向鍊錶也叫雙鏈表,是鍊錶的一種,他的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向鍊錶中的任何乙個結點開始,都可以很方便的訪問他的前驅結點和後繼結點,一般我們都構造雙向迴圈鍊錶。

操作:(1):鍊錶的操作:產生空的鍊錶,銷毀鍊錶,清空鍊錶,判斷鍊錶是否空。

(2):元素的操作:統計個數、賦值、查詢元素、查詢前驅、後繼、插入、刪除、定位元素位置、正序查詢、逆序查詢。

分析:本題是微軟的面試題。很多與樹相關的題目都是用遞迴的思路來解決,本題也不例外。下面我們用兩種不同的遞迴思路來分析。

遞迴:遞迴演算法是把問題轉化為規模縮小了的同類問題的子問題。然後遞迴呼叫函式來表示問題的解。遞迴過程一般通過函式或子過程實現。遞迴方法:在函式或子過程的內部,直接或者間接的呼叫自己的演算法。

遞迴的特點:1)遞迴就是在過程或函式裡呼叫自身。2)在使用遞迴策略時,必須有乙個明確的遞迴結束條件,稱為遞迴出口。3)遞迴呼叫的過程當中需要系統為每一層的返回點、區域性量等開闢棧來儲存。所以遞迴次數較多容易造成棧溢位。遞迴時間代價較高。

思路一:當我們到達某一結點準備調整以該結點為根結點的子樹時,先調整其左子樹將左子樹轉換成乙個排好序的左子鍊錶,再調整其右子樹轉換右子鍊錶。最近鏈結左子鍊錶的最右結點(左子樹的最大結點)、當前結點和右子鍊錶的最左結點(右子樹的最小結點)。從樹的根結點開始遞迴調整所有結點。

思路二:我們可以中序遍歷整棵樹。按照這個方式遍歷樹,比較小的結點先訪問。如果我們每訪問乙個結點,假設之前訪問過的結點已經調整成乙個排序雙向鍊錶,我們再把調整當前結點的指標將其鏈結到鍊錶的末尾。當所有結點都訪問過之後,整棵樹也就轉換成乙個排序雙向鍊錶了。

注:由遞迴的特點可以看到比較適合解決樹的問題,一層一層重複相同的判斷和過程。

程式在專案資料中。

!!其實很多知識並不是想的那麼難,包括樹,鍊錶,遞迴,只要去做,會有很大的驚喜!!

程式設計師面試題精選

問題描述 輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則輸出由字元a b c所能排列出來的所有字串abc acb bac bca cab和cba。問題分析 這是一道很好的考查對遞迴理解的程式設計題。寫遞迴程式關鍵有兩點,處理好進入與返回的關係,進入時改變了什麼,返回時應當恢復。字...

程式設計師面試題精選100題 58 八皇后問題

題目 在8 8的西洋棋上擺放八個皇后,使其不能相互攻擊,即任意兩個皇后不得處在同一行 同一列或者同一對角斜線上。下圖中的每個黑色格仔表示乙個皇后,這就是一種符合條件的擺放方法。請求出總共有多少種擺法。img 從第一行開始放皇后,那麼就不需要判斷行是否安全,因為肯定安全,所以只需要判斷該列是否安全,而...

程式設計師面試題精選100題 03 求子陣列的最大和

題目 輸入乙個整形陣列,陣列裡有正數也有負數。陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。求所有子陣列的和的最大值。要求時間複雜度為o n 例如輸入的陣列為1,2,3,10,4,7,2,5,和最大的子陣列為3,10,4,7,2,因此輸出為該子陣列的和18。分析 本題最初為2005...