二叉樹的應用

2021-09-07 20:41:58 字數 2771 閱讀 3947

題目資訊:

二叉樹的應用

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...