二叉排序樹類

2021-10-08 19:33:13 字數 2703 閱讀 4820

#include

using

namespace std;

// 節點類

template

<

typename t>

struct node

node

(const t &value)

:data

(value)

,left

(nullptr),

right

(nullptr),

parent

(nullptr)}

;// 節點類工廠函式

template

<

typename t>

node

*create_node

(const t &data)

// 二叉樹類

template

<

typename t>

class

binarysorttree

~binarysorttree()

bool

isempty()

const

// 利用迴圈進行資料插入

void

insert

(const t &data)

else

else

if(data > pcur-

>data)

else}if

(data < ppre-

>data)

else

pnode-

>parent = ppre;}}

// 利用遞迴進行資料插入

void

insertbyrecur

(const t &data)

else

}// 查詢資料為data的節點,如果不存在則返回空指標

node

*find

(const t &data)

else

if(data > pcur-

>data)

else

}return pcur;

}// 刪除值為data的節點所在的子樹

void

deletesubtree

(const t &data)

}// 刪除值為data的節點

void

deletenode

(const t &data)

}void

print()

const

private

:// 銷毀二叉排序樹

static

void

destroy

(node

*proot)

// 遞迴插入

static

void

insert

(node

*proot,

const t &data)

else

}else

if(data > proot-

>data)

else

}else

}// 遞迴刪除子樹

void

deletesubtree

(node

*proot)

if(proot-

>data < proot-

>parent-

>data)

proot-

>parent-

>left =

nullptr

;else

proot-

>parent-

>right =

nullptr

;delete proot;

}// 分四種情況刪除節點

void

deletenodeimpl

(node

*pnode)

// 刪除的節點為葉節點

void

deleteleafnode

(node

*pnode)

else

delete pnode;

}// 刪除的節點只有左子樹

void

deletenodehasleft

(node

*pnode)

else

delete pnode;

}// 刪除的節點只有右子樹

void

deletenodehasright

(node

*pnode)

else

delete pnode;

}// 刪除的節點左右子樹都存在

void

deletenodehasboth

(node

*pnode)

t backup = ppre-

>data;

deletenodeimpl

(ppre)

; pnode-

>data = backup;

}// 中序遍歷列印二叉樹

二叉排序樹

在複習資料結構,把這個東西總結一下。這種結構是動態查詢表,這種動態是相對靜態查詢 順序查詢,折半查詢,分塊查詢等 來說的。對於各種靜態鍊錶,要達到查詢複雜度為o logn 必須要求有序 而要使插入刪除複雜度為o 1 必須是鍊錶儲存。動態查詢表就可以同時滿足這兩者。動態查詢表的特點是表結構本身在查詢過...

二叉排序樹

name 二叉排序樹相關操作 author unimen date 2011 10 8 13 14 21 刪除結點比較麻煩,總結如下 4大種情況 1 結點p無右孩子 將該點的左孩子變為其在雙親中的同位孩子 1 p為其雙親的左孩子時將其的左孩子變為雙親的左孩子 2 p為其雙親的右孩子時將其的左孩子變為...

二叉排序樹

include include include include struct tree node void insert node struct tree node int void pre order struct tree node void in order struct tree node ...