二分查詢也是比較經典的面試題
條件:
1)資料是按從小到大或者是從大到小排序的
2)給定一組資料,在所給的排序資料中找出與資料相等的值,並返回它的下標
例子**:
#include
using namespace std;
int binary_search(int *a, int num, int
value);
/*二分查詢函式*/
int binary_search(int *a, int num, int
value)
else
if(a[mid] > value)
else
}return -1;
}/*主函式*/
解題思路:
當我們到達某一結點準備調整以該結點為根結點的子樹時,先調整其左子樹將左子樹轉換成乙個排好序的左子鍊錶,再調整其右子樹轉換右子鍊錶。最近鏈結左子鍊錶的最右結點(左子樹的最大結點)、當前結點和右子鍊錶的最左結點(右子樹的最小結點)。從樹的根結點開始遞迴調整所有結點。
步驟:
1)建立二元查詢樹
2)將二元查詢樹轉換成雙向鍊錶
3)遍歷二元查詢樹
/*定義二元查詢樹節點結構*/
typedef struct _bstreenodebstreenode;
/*轉換子二叉查詢樹變成排序雙向鍊錶*/
bstreenode* convertnode(bstreenode *pnode, bool asright)
//左子樹鍊錶
bstreenode *pleft =
null;
//右子樹鍊錶
bstreenode *pright =
null;
//1. 返回左子鍊錶的最大值給當前node
if(pnode->left)
if(pleft)
//2. 返回右子鍊錶的最小值給當前node
if(pnode->right)
if(pright)
bstreenode *p_temp = pnode;
if(asright)
}else
}return p_temp;
}/*轉換二叉查詢樹變成排序雙向鍊錶*/
bstreenode* convert(bstreenode *p_headoftree)
思路:
1. 什麼是棧?
2. 回想一下棧的結構,然後再看看題目,似乎覺得還是很有難度。
經過一番苦想,思路可以是一下這種:
c 經典面試題
1 標頭檔案中的 ifndef define endif 幹什麼用?答 防止該標頭檔案被重複引用。2 include 和 include filename.h 有什麼區別?答 對於 include 編譯器從標準庫路徑開始搜尋 filename.h 對於 include filename.h 編譯器從...
C 經典面試題
1.輸入乙個字串,將其逆序後輸出。使用c 不建議用偽碼 include using namespace std void main a p malloc 1024 應該寫成 p char malloc 1024 沒有釋放p的空間,造成記憶體洩漏。8.下面的 有什麼問題?並請給出正確的寫法。void ...
C 經典面試題
c 知識總結目錄索引 二 哪些函式不能宣告成虛函式 三 為什麼析構函式和建構函式內不能呼叫虛函式 四 為什麼析構函式最好宣告成虛函式 五 實現乙個不能被繼承的類 六 實現乙個類定義出來的物件都在堆上面 七 實現乙個類定義出來的物件都在棧上面 八 實現乙個類,定義出的物件不能在堆上 九 用c語言實現繼...