二叉查詢樹 插入 刪除 查詢

2021-07-14 21:06:09 字數 1915 閱讀 9400

二叉查詢樹是滿足以下條件的二叉樹:1.左子樹上的所有節點值均小於根節點值,2右子樹上的所有節點值均不小於根節點值,3,左右子樹也滿足上述兩個條件。

二叉查詢樹的插入過程如下:1.若當前的二叉查詢樹為空,則插入的元素為根節點,2.若插入的元素值小於根節點值,則將元素插入到左子樹中,3.若插入的元素值不小於根節點值,則將元素插入到右子樹中。

二叉查詢樹的刪除,分三種情況進行處理:

1.p為葉子節點,直接刪除該節點,再修改其父節點的指標(注意分是根節點和不是根節點),如圖a。

2.p為單支節點(即只有左子樹或右子樹)。讓p的子樹與p的父親節點相連,刪除p即可;(注意分是根節點和不是根節點);如圖b。

3.p的左子樹和右子樹均不空。找到p的後繼y,因為y一定沒有左子樹,所以可以刪除y,並讓y的父親節點成為y的右子樹的父親節點,並用y的值代替p的值;或者方法二是找到p的前驅x,x一定沒有右子樹,所以可以刪除x,並讓x的父親節點成為y的左子樹的父親節點。如圖c。

插入節點的**:

struct node

;pnode bt = null;

//遞迴方法插入節點

pnode insert(pnode root, int x)

else

if(x < root->val)

else

return root;}//

非遞迴方法插入節點

void insert_bst(pnode q, int x)

while(q->lchild != p && q->rchild != p)

else

}

else

else}}

return;

}

查詢節點的**:

pnode search_bst(pnode p, int x)

else

if(x < p->val)

else

}if(p == null)

return p;

}

刪除節點的**

bool delete_bst(pnode p, int x) //

返回乙個標誌,表示是否找到被刪元素

else

if(x < p->val)

else

}if(p == null)

if(p->lchild == null && p->rchild == null)

else

if(q->lchild == p)

else

free(p); //

釋放節點p

}else

if(p->lchild == null || p->rchild == null)

else

}

else

else

if(q->lchild == p && p->rchild)

else

if(q->rchild == p && p->lchild)

else

}free(p);

}else

p->val = s->val; //

把節點s的值賦給p

if(t == p)

else

free(s);

}return find;

}

二叉查詢樹 插入 刪除 查詢

二叉查詢樹 插入 刪除 查詢 二叉查詢樹 是滿足以下條件的二叉樹 1.左子樹上的所有節點值均小於根節點值,2右子樹上的所有節點值均不小於根節點值,3,左右子樹也滿足上述兩個條件。二叉查詢樹的插入 過程如下 1.若當前的二叉查詢樹為空,則插入的元素為根節點,2.若插入的元素值小於根節點值,則將元素插入...

二叉查詢樹的查詢 插入 刪除

二叉查詢樹 英語 binary search tree 也稱為二叉搜尋樹 有序二叉樹 ordered binary tree 或排序二叉樹 sorted binary tree 是指一棵空樹或者具有下列性質的二叉樹 若任意節點的左子樹不空,則左子樹上所有節點的值均小於它的根節點的值 若任意節點的右子...

python實現二叉查詢樹的查詢 插入 刪除操作

本文用python3實現二叉查詢樹的查詢 插入 刪除操作。完整 查詢操作 先取根節點,如果它等於要查詢的數那就返回。如果要查詢的數比根節點的值小,就在左子樹中遞迴查詢 如果要查詢的數比根節點的值大,那就在右子樹中遞迴查詢。def search self,data res node self.root...