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

2021-10-23 01:49:15 字數 1535 閱讀 5404

二叉排序樹(binary sort tree)又稱為二叉查詢樹,它或者是一棵空樹,或者是具有下列性質的二叉樹:

– 若它的左子樹不為空,則左子樹上所有結點的值均小於它的根節點的值;

– 若它的右子樹不為空,則右子樹上所有結點的值均大於它的根節點的值;

– 它的左、右子樹也分別為二叉排序樹(遞迴)。

二叉排序樹用中序遍歷之後即為順序陣列;

查詢:

// 二叉樹的二叉鍊錶結點結構定義

typedef

struct bitnode

bitnode,

*bitree;

// 遞迴查詢二叉排序樹 t 中是否存在 key

// 指標 f 指向 t 的雙親,其初始值呼叫值為 null

// 若查詢成功,則指標 p 指向該資料元素結點,並返回 true

// 否則指標 p 指向查詢路徑上訪問的最後乙個結點,並返回 false

status searchbst

(bitree t,

int key, bitree f, bitree *p)

else

if( key == t->data )

// 查詢成功

else

if( key < t->data )

else

}

插入:

// 當二叉排序樹 t 中不存在關鍵字等於 key 的資料元素時,

// 插入 key 並返回 true,否則返回 false

status insertbst

(bitree *t,

int key)

else

if( key < p->data )

else

return true;

}else

}

刪除:

status deletebst

(bitree *t,

int key)

else

else

if( key <

(*t)

->data )

else}}

status delete

(bitree *p)

elseif(

(*p)

->lchild ==

null

)//需要刪除的節點沒有左子樹時,直接用該節點的左子樹覆蓋該節點

else

//需要刪除的節點既有左子樹又有右子樹時,可用其前驅節點a的值替換該節點的值,並用其前驅節點a的左子樹覆蓋節點a

(*p)

->data = s->data;

if( q !=

*p )

else

free

(s);

}return true;

}

二叉排序樹 插入 刪除 查詢

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

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

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

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

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