二叉搜尋樹

2021-09-29 21:50:35 字數 1489 閱讀 3256

這慘絕人寰的日誌排版。

二叉搜尋樹:能夠高效進行如下操作的資料結構:

1.插入數值。

2.刪除數值。

3.查詢數值。

滿足左小右大。

二叉搜尋樹如果遇到了極端資料情況,會大大降低自己的效率。

平衡二叉樹就是二叉搜尋樹的改進,巧妙地通過旋轉操作來保持樹的平衡。以下的**沒有實現平衡二叉樹的功能,因為c++的stl庫里有set容器,set是像前面所說的一樣使用二叉搜尋樹維護集合的容器。

二叉搜尋樹最需要注意的是它的        刪除       操作:

1.需要刪除的節點沒有左兒子,那麼就把右兒子提上去。

2.需要刪除的節點的左兒子沒有右兒子,那麼就把左兒子提上去。

3。以上兩種情況都不滿足的話,就把做兒子的子孫中最大的節點提到需要刪除的節點上。

二叉搜尋樹最需要注意的是它的        刪除       操作:

1.需要刪除的節點沒有左兒子,那麼就把右兒子提上去。

2.需要刪除的節點的左兒子沒有右兒子,那麼就把左兒子提上去。

3。以上兩種情況都不滿足的話,就把做兒子的子孫中最大的節點提到需要刪除的節點上。

#include

using namespace std;

//二叉搜尋樹

struct node ;

//插入數值x

node* insert(node* p, int x)

else

}//查詢數值x

bool find(node* p, int x)

//刪除數值x

node * remove(node * p, int x)

else if (p->lch->rch == null)

else

return p;

}//先序遍歷。

void provisit(node * p)

}//中序遍歷。

void midvisit(node * p)

}//後序遍歷:

void nextvisit(node * p)

}//測試

int main()

provisit(root);

cout << endl;

midvisit(root);

cout << endl;

nextvisit(root);

cout << endl;

if (find(root, 1)) cout << "find it" << endl;

else cout << "not find it" << endl;

if (find(root, 11)) cout << "find it" << endl;

else cout << "not find it" << endl;

root = remove(root, 1);

provisit(root);

cout << endl;

return 0;

}

二叉搜尋樹 二叉搜尋樹

題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...

二叉搜尋樹 修剪二叉搜尋樹

第一反應是重構,看來別人的解答發現,其實不用重構那麼複雜。treenode trimbst treenode root,int low,int high if root val high 下一層處理完左子樹的結果賦給root left,處理完右子樹的結果賦給root right。root left ...

樹 二叉樹 二叉搜尋樹

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 13輸出 true 示例 2 輸入 5 14 3 6輸出 false 解釋 輸入為 ...