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

2021-08-10 14:46:17 字數 1998 閱讀 9239

二叉排序樹的查詢-插入-刪除

何謂二叉排序樹

定義:二叉排序樹又稱二叉查詢樹,它或者是一顆空樹,或者是具有以下性質的二叉樹

1:若它的左子樹不空,則左子樹上所有節點的值均小於該節點的值。

2:若它的右子樹不空,則右字樹上所有節點的值均大於該節點的值。

3:它的左右子樹也分別為二叉排序樹。

時間複雜度:o(h) = log(n) 查詢插入以及刪除演算法時間複雜度均為此

二叉排序樹的建立

建立乙個二叉排序樹,可使用前序建立等,看自己習慣,這裡採用前序建立

typedef

struct bitree

bitree;

void createbtree(bitree* &pnode)

}

二叉排序樹的查詢

該二叉排序樹已排好序,故進行查詢時只需沿著一條分支往下走即可查詢到該值。

char searchbt(bitree*pnode,char key)

if(pnode ==

null)

return

'0';

else

if(key == pnode->elem)

return pnode->elem;

else

if(keyelem)

return searchbt(pnode->left);

else

return searchbt(pnode->right)

二叉排序樹的插入

插入元素至一二叉排序樹,原理類似於二叉排序樹的查詢操作,可先對其進行查詢操作,對key進行查詢的過程中即對其位置進行了估計,後可直接對查詢到為null的前乙個節點進行插入操作。

char inserttree(bitree *&pnode,char key)

return

'0';

}char searchbst(bitree *&pnode,bitree *&fnode,bitree *&nodeleft,bitree *&noderight,char key)

if (key < pnode->elem)

else

if (key>pnode->elem)

}

二叉排序樹的刪除

二叉排序樹的刪除操作可分為以下四種情況:

1:待刪除節點無左子樹亦無右子樹,直接刪除該節點即可。

2:待刪除節點有左子樹,無右子樹,直接刪除該節點,讓其父節點指向其左子樹節點。

3:待刪除節點無左子樹,有右子樹,直接刪除該節點,讓其父節點指向其右子樹節點。

4:待刪除節點有左子樹,有右子樹,尋找其後繼節點,讓後繼節點值代替該節點後刪除後繼節點原先指標。

char deletebi(bitree *&pnode)

else

if (pnode->left ==

null

&& pnode->right !=

null)

else

if (pnode->left !=

null

&& pnode->right ==

null)

else

//即待刪除節點左右節點均不為空,此時找到該節點的後繼節點,用後繼節點代替該節點,方便後續紅黑樹操作

pnode->elem = s->elem;

if (temp != pnode)

temp->left = s->right;

else

temp->right = s->right;

s =null;

delete(s);

}return

'1';

}

二叉排序樹 插入 刪除 查詢

原本是想寫關於android分享功能的部落格,但是沒真機不好去測試,大白天的手機被3歲娃娃,拿去看少兒頻道了,關於二叉排序樹的定義是 二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 2 若右子樹不空,則右子樹上所有結點的值均大於它的...

二叉排序樹的查詢(插入 刪除)

近期逐步開始期末複習,在部落格上投入的精力將大幅減少大概一月左右!二叉樹的二叉鍊錶結點結構定義 typedef struct bitnodebitnode,bitree 遞迴查詢二叉排序樹t中是否存在key,指標f指向t的雙親,其初始呼叫值位null,若查詢成功,則指標p指向該資料元素結點,並返回t...

二叉排序樹的查詢,插入,刪除

老規矩先上 include 這裡我們設了兩個引用,乙個是b是a的引用,乙個是c是b的引用,即a就是b就是c,三者等價 voidf1 int voidf2 int intmain voidf1 int b voidf2 int c 最終執行的結果為 從結果可以看出,a,b,c三者共用同一儲存單元.最後...