二叉搜尋樹面試題總結

2021-08-25 14:31:26 字數 1548 閱讀 6897

0.什麼是二叉搜尋樹

二叉搜尋樹就是左子樹所有結點都小於根結點,右子樹所有結點都打於根節點。當然這個定義遞迴的,它的左右子樹也滿足這個特點

例如:

0.定義結構
typedef

int bstdatatype;

//定義二叉搜尋樹結點型別

typedef

struct bstreenode

bstreenode

1.向二叉搜尋樹中插入乙個值

總結於我的另一篇部落格:

2.二叉搜尋樹刪除乙個結點

總結於我的另一篇部落格:

3.在二叉搜尋樹中查詢乙個結點

//查詢乙個結點

//根據二叉搜尋樹的特點,左樹都小於根節點,右樹都大於根節點的特點和已知值相比遍歷二叉搜尋樹來查詢

//這裡直接給一級指標也可以,為了和上邊操作統一才弄得二級指標

bstreenode* bstreefind(bstreenode** root, bstdatatype x)

//x小於當前結點,必然在左樹

else

if (cur->_data>x)

else

}//遍歷結束則沒有找到,返回null

return

null;

}

bstreenode* bstreefindr(bstreenode** root, bstdatatype x)

//左子樹查詢

if ((*root)->_data > x)

//右子樹查詢

else

if ((*root)->_data < x)

//相等則返回位址

else

}

4.中序遍歷二叉搜尋樹(遍歷出來的序列遞增,方便測試)

思路:遞迴遍歷,先遞迴遍歷左子樹,在訪問根結點,最後遞迴遍歷右子樹。當然也可以用非遞迴遍歷,下邊貼出二叉樹的三種遍歷方式(遞迴&非遞迴)的鏈結。

//中序遍歷二叉搜尋樹(遞迴)

void bstreeinorder(bstreenode** root)

//遞迴遍歷左子樹

bstreeinorder(&(*root)->_left);

//訪問根結點

printf

("%d ", (*root)->_data);

//遞迴遍歷右子樹

bstreeinorder

(&(*root)->_right);

}

5.假設給你一篇英語文章,又給你乙個在這個英語文章中的英語單詞,讓你檢查這個英語單詞是否拼寫正確。(key模式)

總結於我的另一篇部落格:

6.假設給你一篇英語文章,如何才能求出文章中所有單詞重複出現的次數呢?(key-value模式)

總結於我的另一篇部落格:

面試題 04 05 合法二叉搜尋樹

在二叉搜尋樹中 1.若任意結點的左子樹不空,則左子樹上所有結點的值均不大於它的根結點的值。2.若任意結點的右子樹不空,則右子樹上所有結點的值均不小於它的根結點的值。3.任意結點的左 右子樹也分別為二叉搜尋樹。definition for a binary tree node.struct treen...

面試題 04 09 二叉搜尋樹序列

從左向右遍歷乙個陣列,通過不斷將其中的元素插入樹中可以逐步地生成一棵二叉搜尋樹。給定乙個由不同節點組成的二叉樹,輸出所有可能生成此樹的陣列。示例 給定如下二叉樹 2 1 3 返回 2,1,3 2,3,1 不會做,後來看了題解 題目的意思是,按某種順序依次插入所有節點 不能插入已有樹的中間,只能插在最...

二叉樹的面試題總結

二叉樹的建立 二叉樹的高度 二叉樹某層節點的個數 二叉樹的映象 二叉樹最遠兩個節點的距離 二叉樹的前中後層序遞迴非遞迴遍歷 判斷二叉樹是否是完全二叉樹 二叉樹葉子節點的個數 include include include using namespace std template struct bin...