二叉查找樹(Binary Search Tree),也稱二叉搜索樹,是指一棵空樹或者具有下列性質(zhì)的二叉樹:
任意節(jié)點(diǎn)的左子樹不空,則左子樹上所有結(jié)點(diǎn)的值均小于它的根結(jié)點(diǎn)的值;
任意節(jié)點(diǎn)的右子樹不空,則右子樹上所有結(jié)點(diǎn)的值均大于它的根結(jié)點(diǎn)的值;
任意節(jié)點(diǎn)的左、右子樹也分別為二叉查找樹;
沒有鍵值相等的節(jié)點(diǎn)。
二叉查找樹相比于其他數(shù)據(jù)結(jié)構(gòu)的優(yōu)勢在于查找、插入的時(shí)間復(fù)雜度較低。為O(log n)。二叉查找樹是基礎(chǔ)性數(shù)據(jù)結(jié)構(gòu),用于構(gòu)建更為抽象的數(shù)據(jù)結(jié)構(gòu),如集合、multiset、關(guān)聯(lián)數(shù)組等。(摘自維基百科)
圖1↓ :查找 BST 中的某個(gè)元素
在二叉搜索樹b中查找x的過程為:
若b是空樹,則搜索失敗,否則:
若x等于b的根節(jié)點(diǎn)的數(shù)據(jù)域之值,則查找成功;否則:
若x小于b的根節(jié)點(diǎn)的數(shù)據(jù)域之值,則搜索左子樹;否則:
查找右子樹。
類似于二分查找法。
圖2 ↓ :從有序數(shù)組構(gòu)造一個(gè)二叉查找樹
圖3 ↓:往 BST 中插入元素
向一個(gè)二叉搜索樹b中插入一個(gè)節(jié)點(diǎn)s的算法,過程為:
若b是空樹,則將s所指結(jié)點(diǎn)作為根節(jié)點(diǎn)插入,否則:
若s->data等于b的根節(jié)點(diǎn)的數(shù)據(jù)域之值,則返回,否則:
若s->data小于b的根節(jié)點(diǎn)的數(shù)據(jù)域之值,則把s所指節(jié)點(diǎn)插入到左子樹中,否則:
把s所指節(jié)點(diǎn)插入到右子樹中。(新插入節(jié)點(diǎn)總是葉子節(jié)點(diǎn))