二叉搜尋樹(遞迴 非遞迴)

2021-08-19 23:20:01 字數 2347 閱讀 4499

完整源**在此

1、二叉搜尋樹的概念

二叉搜尋樹又稱二叉排序樹,它或者是一棵空樹,或者是具有以下性質的二叉樹。

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

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

它的左右子樹也分為二叉搜尋樹

此二叉樹的中序遍歷結果為: 0,1,2,3,4,5,6,7,8,9;

2、二叉搜尋樹的基本操作

1.初始化二叉搜尋樹

void initbstree(bstnode** proot)

2. 插入

非遞迴

void insertbstree(bstnode** proot, datatype data)

else

if (pcur->_data <

data)

//如果有結點和data相等,直接返回

else

}pcur = buybstnode(data);

//如果雙親的值大於它,則讓雙親的左指標域指向它

if (pparent->_data > pcur->_data)

else

}

遞迴
int

inseretbstreed(bstnode** proot, datatype

data)

if ((*proot)->_data > data)

return inseretbstreed(&(*proot)->pleft, data);

else

if ((*proot)->_data < data)

return inseretbstreed(&(*proot)->pright, data);

else

return 0;

}

3、刪除值為data的結點

非遞迴

void deletebstree(bstnode** proot, datatype data)

else

if (pcur->_data <

data)

else

}if (pcur)

}//如果只有右孩子

else

if (pcur->pright)

}//如果有兩個孩子

else

//找到了,替換

pcur->_data = pdel->_data;

if (pparent->pleft == pdel)

pparent->pleft = pdel->pright;

else

pparent->pright = pdel->pright;

}free(pdel);

pdel =

null;}}

遞迴
void deletebstreed(bstnode** proot, datatype data)

//只有右孩子

else

if((*proot)->pleft)

else

(*proot)->_data = pdel->_data;

deletebstreed(&pdel->pright, data);}}

}

在二叉搜尋樹中查詢值為data的結點

非遞迴

bstnode* findbstree(bstnode* proot, datatype data)

else

if (pcur->_data <

data)

else

if (pcur->_data ==

data)

}return

null;

}

遞迴
bstnode* findbstreed(bstnode* proot, datatype data)

3、二叉樹的效能分析

插入和刪除操作都必須先查詢,查詢效率代表了二叉搜尋樹中各個操作的效能

對於同乙個二叉樹,由於插入次序不同,會得到不同的二叉樹

最優情況下,二叉搜尋樹為完全二叉樹,其平均比較次數為:lgn

最差情況下,二叉搜素樹退化為單支樹,請平均比較次數為:n/2

二叉搜尋樹 非遞迴)

二叉查詢樹 英語 binary search tree 也稱二叉搜尋樹 有序二叉樹 英語 ordered binary tree 排序二叉樹 英語 sorted binary tree 是指一棵空樹或者具有下列性質的二叉樹 任意節點的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 任意節點的...

二叉樹 遞迴 非遞迴

include include include include using namespace std typedef struct node bintree typedef struct node1 btnode void creatbintree char s,bintree root 建立二叉...

非遞迴實現搜尋二叉樹

include using namespace std template struct binarysearchtreenode template class binarysearchtree binarysearchtree binarysearchtree bstree bsnode opera...