簡述資料結構 二叉查詢樹

2022-08-12 16:06:14 字數 1819 閱讀 7343

當一棵二叉樹滿足下面條件的時候就成了二叉查詢樹:對於樹的任意乙個節點,左兒子的值比右兒子小(或者反過來也行)。

二叉查詢樹本質還是二叉樹,因此也具有二叉樹的性質。

這個操作比較簡單,遞迴查詢樹根.

//公有函式contains通過呼叫私有函式contains遞迴查詢。

bool contains(const object &e) const

bool contains(const object &e, node *t)

往乙個二叉查詢樹中插入元素不會改變原樹的結構,只需要找到乙個合適的位置滿足二叉查詢樹的性質就可以了。

void insert(const object &e)

//私有函式操作子樹,二叉查詢樹的插入操作不會改變原樹的結構

void insert(const object &e, node *&t)

else

}

刪除乙個元素必須分情況來討論。

要刪除的節點是葉子。

如果要刪除的節點是乙個葉子,那麼只需要簡單地刪除這個節點,並將其父節點的相關指標置為null就可以了,具體的做法是直接將這個節點的指標變為null,然後釋放其儲存。

要刪除的節點只有乙個子樹。

如果要刪除的節點只有乙個子樹,那麼只需要讓該節點的父節點指向節點的子樹,然後釋放掉該節點的儲存。

要刪除的節點有兩個子樹。

如果要刪除的節點有兩個子樹,那麼需要找出該節點右子樹中的最小元素,並將這個最小元素賦給本節點,再將右子樹中的該元素刪除,此時的刪除操作就轉化成了1中情況(最小元素必為葉子)。

其中,上述1和2可以合併實現。

void remove(const object &e)

void remove(const object &e, node *&t)

else

}

template class binarysearchtree

binarysearchtree(binarysearchtree &t)

~binarysearchtree()

//深拷貝

binarysearchtree & operator =(binarysearchtree &t)

void insert(const object &e)

void remove(const object &e)

bool contains(const object &e) const

bool isempty() const

const object & findmin() const

const object & findmax() const

void makeempty()

void printtree()

}void remove(const object &e, node *&t)

else

} bool contains(const object &e, node *t)

const object & findmin(node *t) const

return t->element;

} const object & findmax(node *t) const

return t->element;

} void makeempty(node * &t)

t = null;

} node * clone(node *t)

void printtree(const node *t)

};

(資料結構)二叉查詢樹

樹,是一種資料結構。它是由n個有限節點組成乙個具有層次關係的集合。特點 樹的基本術語 節點的度 節點擁有的子樹的數目。葉子 度為零的節點。分支節點 度不為零的節點。樹的度 樹中節點的最大的度。層次 根節點的層次為1,其餘節點的層次等於該節點的雙親的層次加1。樹的高度 樹中節點的最大層次。無序樹 如果...

資料結構 二叉查詢樹

使二叉樹成為二叉查詢樹的性質是,對於樹中的每個節點x,它的左子樹中所有關鍵字值小於x的關鍵字值,而它的右子樹中所有關鍵字值大於x的關鍵字值。這意味著,該樹所有的元素以某種統一的方式排序。二叉查詢樹是一棵特殊的二叉樹,二叉查詢樹中節點的結構與二叉樹種節點的結構相同,關鍵在於可以在二叉查詢樹上可以執行的...

資料結構 樹 二叉查詢樹

wiki 首先是名稱 二叉查詢樹英文叫binary search tree,這個在很多演算法題目中很常見所以要記住,特別是英文題目中。也叫做二叉排序樹,二叉搜尋樹等等。具體的定義比較官方,用自己的話說,首先它肯定是二叉樹,其次,當前節點的左子葉元素值比當前節點小,右子葉元素值比當前節點大,所以節點均...