資料結構查詢演算法之二叉查詢樹

2021-06-17 21:59:28 字數 1667 閱讀 4071

關於二叉查詢樹,介紹肯定是很多的,這裡我列舉的下面的**和思想,是按照二叉查詢樹,但是沒有使用二叉樹的資料結構,而是按照陣列索引建立邏輯上的二叉樹結構,並使用二叉樹的遞迴方式查詢給定的值,並在注釋中對不同的情況提出一點自己的看法,建立樹的過程參考堆排序的思想,並且在結構上大致相同,所以需要注意的地方也基本上相同,前面介紹了推排序需要注意的地方,這裡有幾個地方需要說明的是,裡面有一段二分查詢的函式**,只是前面使用過,放在這裡也是為了和後面做個對比,並且該函式和我們一般使用的二分查詢演算法略有不同,**注釋中提到了,下面就直接將詳細的**和注釋貼出來。

#include #include #include #include using namespace std;

/*主要是這幾種基本的演算法: 1 順序查詢,

2 二分查詢

3 二叉查詢樹,基礎是一顆排序樹,建立樹的方法可以參考二叉堆,

查詢按遞迴即可,至於插入和刪除只要看是影響前面還是後面的節

點,調整即可,參考二叉堆

4 *//*

二分查詢,是不分順序的查詢演算法,在基本有序的情況下,

使用有序的二分查詢演算法效率確實高很多

*/template int binarysearch(t array,int s,int e,t &t)

int m=(s+e)>>1;

int result = binarysearch(array,s,m,t);

if(result != -1) return result;

return binarysearch(array,m+1,e,t);

}/*

下面使用二叉查詢樹,有幾個基本的過程:1 建立二叉查詢樹,

按照建立推的方法建立,2 調整二叉查詢樹,3 遍歷樹

*///二叉樹的資料結構

// template // struct binarynode;

/* 這裡我想針對不同的情況應該有兩種解決方案: 1 第一種是已經存在二叉樹,只需要遍歷查詢

2 第二種就是需要自己建立,然後查詢,

這裡我選擇實現第二種解決方案,但是不使用二叉樹的資料結構參考推的建立方法,用位置繫結

節點之間的關係。

*///這個函式還真是蛋疼,雖然很簡單,但是很頭疼

template void exchange(t &t1,t &t2, t &t3)

else }}

template void buildbinarytree(t array,int n)

/* 還存在乙個問題, 就是找到了原來的節點之後,因為調整過

原來的節點,所以輸出的對應的位置和原來輸入的序列的位置

不同,這裡可以從資料結構上變動,

struct {

t t;

size_t location; //儲存輸入時位置資訊

}; 最後按照對應的位置即可找到輸入時的序列的位置

*/template //i表示當前查詢到的節點

int binarytreesearch(t array,int i,int size,t &t)

// template //size可以不用,直接用後面的節點

// void adjustbinarytree(binarynode *currentnode)if()

//

// }

int main()

}

資料結構之二叉查詢樹

針對二叉查詢樹的操作 增刪改查 的時間和樹的高度成正比,比如都有10個節點的乙個樹,樹高為4和樹高為10的操作時間肯定是不同的,這個時間實際上是o lgn 二叉查詢樹的期望的樹高是lgn,從而基本動態集合的操作平均時間為 lgn 通常二叉查詢樹基於鍊錶實現,每個節點儲存左,右子節點,如果想更方便的實...

資料結構之二叉查詢樹

二叉樹成為二叉查詢樹的性質是,對於樹種的每個節點x,他的左子樹中的所有關鍵字的值均小於x的關鍵字的值,而他的右子樹中的所有關鍵字的值均大於x的關鍵字的值。這意味著,該樹的所有元素均可以是用某種統一的方式排序。tree.h pragma once we define the binary tree.s...

資料結構之二叉查詢樹

二叉查詢樹 binary search tree 又被稱為二叉搜尋樹。設x為二叉查詢樹中的乙個結點,x節點包含關鍵字key,節點x的key值記為 ke y x k ey x 如果y是x的左子樹中的乙個結點,則 ke y y ke y x k ey y ke y x 如果y是x的右子樹的乙個結點,則 ...