題目資訊:
二叉樹的應用
1.利用bst實現乙個城市資料庫:每個資料庫結點包括城市名稱和以整數x與y表示的城市座標。根據城市名稱組織該bst;
2.在該資料庫上實現按城市名稱進行的插入、刪除和檢索;
3.列印出以指定字母打頭的所有城市記錄;
4.列印出與指定點的距離在給定值之內的所有城市記錄;
5.最後提交完整的實驗報告和源程式
輸入格式:
第1行:有1個整數m,表示接下來要插入的m條記錄。
第2行到第1+m行:每行表示乙個插入記錄。包括乙個字串cityname,兩個整數x,y。分別表示城市名稱和座標。
接下來n行:為不定行數的插入和刪除操作。首數字為0代表刪除,首數字為1代表插入,首數字為2代表結束插入、刪除操作。
接下來1行:1個字元,表示要進行檢索的指定字母。
最後1行:3個整數。x,y,d。x,y表示指定點的座標,d表示距離。
輸出格式:
完成插入和刪除操作之後中序遍歷bst並列印,每條記錄包括一行,包括:城市名字
打以指定字母打頭的所有城市記錄,每條記錄包括一行,包括:城市名字,x和y座標
列印與指定點的距離在給定值之內的所有城市記錄,每條記錄包括一行,包括:城市名字,x和y座標
測試樣例:
輸入:4
chongqing 1 1
chengdu 1 2
shenyang 2 2
changchun 2 3
1 shanghai 2 3
0 changchun
0 shenyang
1 beijing 2 22c
0 0 3
輸出:beijing
chengdu
chongqing
shanghai
chengdu 1 2
chongqing 1 1
beijing 2 2
chengdu 1 2
chongqing 1 1
思路:bst樹的element可以作為乙個city類,其他的操作不變,先定義封裝好乙個city類,再封裝好上一級的bstnode,最後封裝好bst樹,再在bst樹里補充定義兩個輸出函式達到檢索輸出和根據距離輸出的目的,**如下:
#include
#include
#include
using namespace std;
class city
city( int b, int c)
city(const city&o)
//string name()
int x()
int y()
};class bstnode
bstnode(string a, city b, bstnode*l=null, bstnode*r=null)
~bstnode() {}
city& element()
void setelement(const city &a)
string name()
void setname(string a)
inline bstnode*left()
void setleft(bstnode*left)
inline bstnode*right()
void setright(bstnode*right)
bool isleaf()
};class bst
bstnode* inserthelp(bstnode*root, const string k, const city it)
else
return root;
}bstnode* deletemin(bstnode*rt)
}bstnode* getmin(bstnode *rt)
bstnode* removehelp(bstnode*rt, const string k)
else if(rt->right(www.wanmeiyuele.cn)==null)
else
}return rt;
}void clearhelp(bstnode*root)
void printhelp(bstnode* root, int level)
void print2(bstnode* root, char c)
void _print(bstnode*root,city &a,int l)
public:
bst()
~bst()
void clear()
void insert(const string k, const city&e)
city remove(const string k)
return temp;
}city find(const string k)
int size()
void print()
void print(char c)
void pprint(city&a, int len)
};int main()
while(1)
else if(judge==1)
}int len;
char c;
cin>>c;
cin>>a>>b>>len;
city last(a,b);
test.print();
test.print(c);
test.pprint(last,len);
實驗結果驗證正確,下面對一些函式進行說明:
二叉樹的應用 二叉樹遍歷的應用
在以上討論的遍歷演算法中,訪問結點的資料域資訊,即操作visite bt data 具有更一般的意義,需根據具體問題,對bt 資料進行不同的操作。下面介紹幾個遍歷操作的典型應用。search bt,x 在bt 為二叉樹的根結點指標的二叉樹中查詢資料元素x。查詢成功時返回該結點的指標 查詢失敗時返回空...
二叉樹應用
1 專案要求 建立一棵二叉樹 前序 中序 層次非遞迴遍歷該二叉樹 判斷該二叉樹是否為二叉排序樹 如果是二叉排序樹,進行結點的插入或刪除 輸出結果 2 解題思路 首先設計乙個結構體,確定需要輸入的資料型別,再設計乙個結構體,用來存放左右孩子的指標。輸入資料建立乙個二叉樹,首先輸入左子樹的資料,以 0 ...
二叉樹及其應用 二叉樹遍歷
給定二叉樹的廣義表表示,構造二叉樹並輸出二叉樹的四種遍歷順序。輸入說明 輸入僅一行,該行僅由 以及大小寫字元構成的二叉樹的廣義表表示,字串長度不超過100。輸出說明 在接下來的四行中依行輸出二叉樹的四種遍歷 輸入樣列 a b d,c e,f h 輸出樣列 abdcefh dbaecfh dbehfc...