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

2021-09-27 22:12:05 字數 1972 閱讀 1993

老規矩先上**

#include

//這裡我們設了兩個引用,乙個是b是a的引用,乙個是c是b的引用,即a就是b就是c,三者等價

voidf1(

int&);

voidf2(

int&);

intmain()

voidf1(

int&b)

voidf2(

int&c)

最終執行的結果為:

從結果可以看出,a,b,c三者共用同一儲存單元.

最後附上乙個詳解鏈結

#include

#include

typedef

int datatype;

//組成二叉排序樹需要兩個部分,乙個是關鍵字,乙個是左,右指標

typedef

struct node

node;

bool search

(node *

&, datatype, node *

, node *&)

;void

insertbst

(node *

&, datatype)

;void

deletebst

(node *

&, datatype)

;void

deletenode

(node *

&, datatype)

;int

main()

/* 如果在二叉排序樹中沒有找到關鍵字,則呼叫insertbst函式

這裡的&表示引用 */

void

insertbst

(node *

&t, datatype key)

else

if(key < p->key)

else

if(key > p->key)}}

//查詢某個元素是否二叉樹中(t指向二叉樹的根節點,key代表關鍵字,f指向t的父親節點,這裡的p是引用,即等價於node *p中的p)

bool search

(node *

&t, datatype key, node *f, node *

&p)else

if(key < t->key)

else

if(key > t->key)

else

}//查詢二叉樹中是否存在關鍵字key的節點,這裡的&為引用

void

deletebst

(node *

&t, datatype key)

else

if(keykey)

else

deletebst

(t->right, key);}

}/* 刪除關鍵字節點:有四種情況:1.待刪節點為葉子節點

2.待刪節點只有左子樹

3.待刪節點只有右子樹

4.待刪節點既有左子樹也有右子樹 */

void

deletenode

(node *

&t, datatype key)

//這裡的t很巧妙,既是待刪節點的指標也是其父節點的左或者右指標

else

if(t->left ==

null

)else

if(t->right ==

null

)else

else

t->key = s->key;

//將最右節點的值賦給待刪節點,然後判斷其是否有子樹節點

if(s->left ==

null

&& s->right ==

null

)else}}

}

二叉排序樹 插入 刪除 查詢

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

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

二叉排序樹的查詢 插入 刪除 何謂二叉排序樹 定義 二叉排序樹又稱二叉查詢樹,它或者是一顆空樹,或者是具有以下性質的二叉樹 1 若它的左子樹不空,則左子樹上所有節點的值均小於該節點的值。2 若它的右子樹不空,則右字樹上所有節點的值均大於該節點的值。3 它的左右子樹也分別為二叉排序樹。時間複雜度 o ...

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

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