背景
靜態查詢表(static search table):只作查詢操作的查詢表。實驗目的動態查詢表(dynamic search table):在查詢過程同時插入查詢表中不存在的資料元素,或者從查詢表中刪除已經存在的某個資料元素。
基於課程「bst」,實現二叉查詢樹(bst),實現乙個靜態查詢表。基本要求
1.使用二叉查詢樹(bst)來實現。給定乙個含有n個整數的集合,有一查詢系統:使用者可隨意給出乙個整數m,便可 通過該系統知道m是否在這個集合中,且可以知曉查詢該整數m需要多少步。請你實 現該功能。2. 二叉樹使用鏈式結構(二叉鍊錶)實現。
3. 基於bst,實現靜態查詢表。
4. 在查詢表中查詢時,要輸出關鍵字比較的次數。
實現的功能:
1.通過鍵盤輸入整數的個數n以及n個整數還有查詢的元素值m;
2.查詢m是否在這n個整數中;
3.求出查詢該整數m需要的步數;
4.通過螢幕顯示是否查詢成功以及比較的次數。
第一行輸入整數個數n,且0每當輸入乙個待查元素,就輸出查詢成功或不成功,並且後面有乙個數字表示查詢的次數,例如:
輸入:21 //查詢21,
輸出:查詢成功 1//表示查詢時比較的次數。
樣例 1: 整數以公升序排列(構建的樹為斜樹)
輸入: 請輸入資料個數: 4
請輸入資料: 2 3 7 8
請輸入欲查詢的數:3
請輸入欲查詢的數:100
輸出: 查詢成功 2
查詢失敗 4
樣例 2:集合中比第乙個數小的數的個數大於比第乙個數大的數的個數
輸入: 請輸入資料個數:5
請輸入資料:8 4 10 6 3
請輸入欲查詢的數:4
請輸入欲查詢的數:10
請輸入欲查詢的數:2
輸出 查詢成功 2
查詢成功 2
查詢失敗 3
樣例 3:按照bst特性可構建出完全二叉樹
輸入: 請輸入資料個數:5
請輸入資料:20 9 30 7 25
請輸入欲查詢的數:25
輸出: 查詢成功 3
樣例 4: 只有乙個整數
輸入: 請輸入資料個數:1
請輸入資料:2
請輸入欲查詢的數:0
請輸入欲查詢的數:2
輸出: 查詢成功 1
查詢失敗 1
樣例 5:第乙個數為這組數中最小的數
輸入: 請輸入資料個數:7
請輸入資料:1 6 7 78 41 54 4
請輸入欲查詢的數:41
請輸入欲查詢的數:85
輸出: 查詢成功 5
查詢失敗 4
資料物件:一組互不相等且可比較大小的整數
資料關係:空樹或者有bst特性的二叉樹
基本操作:
1.準備能儲存這組資料的空間
2.插入元素
3.訪問左子樹
4.訪問右子樹
5.查詢元素
bst的adt的設計:
adt bsttree
資料關係:r
若d = φ,則r=φ;
若d≠φ,則r=,h是如下二元關係:
在d中存在唯一的稱為根的資料元素root,它在關係h下無前驅;
若d-≠φ,則存在d-=,且dl∩dr=φ,xl∈h,且存在dl上的關係hl∈h; 若dr≠φ,則dr中存在惟一的元素xr,∈h,且存在dr上的關係hr∈h;h=;
(d1,)是一棵符合本定義的二叉樹,稱為根的左子樹; (dr,)是一棵符合本定義的二叉樹,稱為根的右子樹。
基本操作:
bstnode* getroot();//操作功能:獲得根節點,結果返回根節點
void inserthelp(bstnode*, int &e );
//操作功能:插入值為e的結點
void insert(e& e);//呼叫inserthelp函式,實現資料封裝
bool findhelp(bstnode* ,int e,int &count=0);
//操作功能:查詢值為e的結點
//若e存在,則返回查詢成功,否則返回查詢失敗,count為比較的次數。
bool find( int e);
//呼叫findhelp函式,實現資料封裝
class bstnode;
2. bst tree adt
int count=0;//記錄關鍵字的比較次數
class bst:public bstnode
bstnode* inserthelp(bstnode*root, int &val );
void insert(int e)//插入值為e的元素
bool find(int e)
輸入格式:第一行輸入整數個數n;
第二行包含n個整數a1, a2, …, an,用空格分隔;
接下來的每一行都有乙個整數b;
輸出格式:若該元素在樹中,則輸出查詢成功,並輸出比較次數;否則輸出查詢不成功與 比較次數。
建樹模組:
void creat(bsttree& tree,int n)
for(i=0;i輸出模組:
void print(bsttree t,int e)
bstnode(int e,bstnode *l=null, bstnode *r=null)//含參建構函式
int getdate()
bstnode* left()
bstnode* right()
void setleft(bstnode *l)
void setright(bstnode *r)
};#endif
bsttree.h
#include "bstnode.h"
#ifndef _bsttree_h
#define _bsttree_h
#include class bsttree
if (e < t->getdate())
else if (e > t->getdate())
return t;
} bool find(bstnode *root, int e, int &count)
return false;
} void clear(bstnode* t)
public:
bsttree()
bstnode* getroot()
void clear()
void insert(int e)
bool find(int e,int &count)
};#endif
main.cpp
#include "bstnode.h"
#include "bsttree.h"
#include using namespace std;
int main()
int f;
cout << "請輸入要查詢的值:" ;
while (cin >> f)
else
cout << "請輸入要查詢的值:" ;
} t.clear();
return 0;
}
資料結構實驗之二叉樹四 還原二叉樹
time limit 1000ms memory limit 65536k 給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。輸入資料有多組,每組資料第一行輸入1個正整數n 1 n 50 為樹中結點總數,隨後2行先後給出先序和中序遍歷序列,均是長度為n的不包含重複英文本母 區分大小...
資料結構實驗之二叉樹四 還原二叉樹
time limit 1000ms memory limit 65536k 有疑問?點這裡 給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。輸入資料有多組,每組資料第一行輸入 1個正整數 n 1 n 50 為樹中結點總數,隨後 2行先後給出先序和中序遍歷序列,均是長度為 n的不包...
資料結構實驗之二叉樹四 還原二叉樹
給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。輸入資料有多組,每組資料第一行輸入 1個正整數 n 1 n 50 為樹中結點總數,隨後 2行先後給出先序和中序遍歷序列,均是長度為 n的不包含重複英文本母 區分大小寫 的字串。輸出乙個整數,即該二叉樹的高度。9 abdfghiec ...