二叉搜尋樹(BST)

2021-08-31 03:23:30 字數 2729 閱讀 6553

二叉搜尋樹(bst)

bst:或者是一棵空樹,

或者對於任何乙個結點,設其值為k,則該結點的左子樹的值小於k,右結點的值大於k。

二叉搜尋樹按照中根遍歷將各個結點列印,將得到按照大到小的順序排列。

bsg示意圖:

二叉搜尋樹的效率在於檢索,將演算法複雜度從2^k減少到log(n)

檢索方式:

從根結點開始,如果等於根結點值直接返回,如果大於根節點從右子樹開始繼續檢索,

如果小於根結點從左子樹繼續檢索,重複這一過程,直到找到對應結點或者返回空。

插入:類似於檢索方式。

bst的建立:

1)非遞迴演算法,構建二叉樹

public void insert(t data) 

//根幾點為空,初始化根結點,返回

if (root == null)

binarynodecurrent = root;

//插入之和根幾點比較

int rst = data.compareto(current.getdata());

while (true)

//大於根結點,繼續往右

if (rst == 1)else

//小於根結點,繼續往左

}else else

}rst = data.compareto(current.getdata());}}

2)非遞迴演算法,檢索

public binarynode findnode(t data) 

//root為空返回

binarynodecurrent = root;

if (current == null)

//當前值和根結點比較

int rst = data.compareto(current.getdata());

while (true)

//當前值比根結點大,繼續往右

if (rst == 1)else

//當前值比根結點

}else else

}rst = data.compareto(current.getdata());}}

搜尋二叉樹刪除:

從二叉搜尋樹刪除結點,不能把這個結點為根的子樹都刪掉,只能刪除這個結點,

並還要保持二叉搜尋樹的原來的特性。

設要刪除結點為k,若k不存在左子樹,直接用右子樹替代當前結點。

k(parent)->right = k->right

若k存在左子樹,找到左子樹中值最大結點,用最大結點替換刪除結點,

設找到的最大結點為g,

若g不存在左子樹且g的parent不是k,用g替換k,

g->left = k->left;

g->right = k->right;

g(parent)-> = null;

k(parent) ->(left/right) = g;

若g存在左子樹且g的parent不是k,用g替換k,

g(parent)->right = g->left;

g->left = k->left;

g->right = k->right;

k(parent) ->(left/right) = g;

若g的parent為k,用g替換k,

g->right = k->right

k(parent)->(left/right) = g

刪除**如下:

public void remove(t data) 

//查詢刪除結點的父結點

binarynodeparent = findparent(root,data);

//判斷是根節點或者是左右子樹

int tag ;

binarynodedelpoint ;

//父結點為空,表示是樹根,並判斷刪除結點為根節點的左子節點還是右結點

if (parent == null)else if (parent.getleft() !=null && data.compareto(parent.getleft().getdata()) == 0)else

binarynodetmpparent = null;

//替換結點

binarynodetmp = delpoint.getleft();

//左子結點不為空

if (tmp != null)

if (tmpparent == null)else

tmp.setleft(delpoint.getleft());

tmp.setright(delpoint.getright());

//左子結點為空,

}else

if (tag == 0)else if (tag == 1)else parent.setright(tmp);

}private binarynodefindparent(binarynodenode,t data)

if (rst == 1)else

}else else

}rst = data.compareto(tmp.getdata());}}

搜尋二叉樹總結:

搜尋二叉實現了對資料的快速查詢,降低演算法複雜度。

搜尋二叉樹的難點,建立和刪除

二叉搜尋樹BST

在二叉搜尋樹b中查詢x的過程為 1.若b是空樹,則搜尋失敗,否則 2.若x等於b的根結點的資料域之值,則查詢成功 否則 3.若x小於b的根結點的資料域之值,則搜尋左子樹 否則 4.查詢右子樹 指標parent指向proot的父節點,其初始呼叫值為null 若查詢成功,指標ptarget指向目標節點,...

BST二叉搜尋樹

深入學習理解bst include using namespace std typedef struct bitnodebitnode,bitree 二叉樹的插入操作 void insert bitnode root,int x 因為當對空樹插入時,相當於改變了樹的根節點的指向,因此需要用到指標或引...

二叉搜尋樹 BST

也稱二叉查詢樹或二叉排序樹 非空二叉搜尋樹的性質 刪除 此操作相對其他操作更加複雜。可以分為三種情況 參考自浙大資料結構 include include include using namespace std typedef int elementtype 二叉搜尋樹 左子樹元素都比根元素小,右子樹...