二叉搜尋樹(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 二叉搜尋樹 左子樹元素都比根元素小,右子樹...