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...