二叉排序樹的查詢-插入-刪除
何謂二叉排序樹
定義:二叉排序樹又稱二叉查詢樹,它或者是一顆空樹,或者是具有以下性質的二叉樹
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三者共用同一儲存單元.最後...