在已知代码基础上用二叉树查找实现航班查询
时间: 2023-11-24 11:05:59 浏览: 81
查找二叉树功能实现
好的,我可以帮你解答这个问题。首先,航班查询需要有一个数据源,我们可以使用一个航班列表来模拟。
假设我们有以下的航班列表:
| 起飞城市 | 到达城市 | 航班号 | 出发时间 |
|---------|---------|-------|---------|
| 北京 | 上海 | CA123 | 08:00 |
| 上海 | 广州 | CZ456 | 10:00 |
| 北京 | 成都 | MU789 | 12:00 |
| 广州 | 北京 | CZ999 | 14:00 |
我们可以将这些航班信息存储到一个二叉搜索树中,以便快速进行航班查询。具体实现方法如下:
1. 定义一个航班节点结构体,包含起飞城市、到达城市、航班号和出发时间四个字段。
```c++
struct FlightNode {
std::string fromCity;
std::string toCity;
std::string flightNo;
std::string departureTime;
};
```
2. 定义一个二叉搜索树节点结构体,包含一个航班节点和两个子节点指针。
```c++
struct TreeNode {
FlightNode* data;
TreeNode* left;
TreeNode* right;
};
```
3. 定义一个二叉搜索树类,包含插入节点和查找节点两个方法。
```c++
class FlightSearchTree {
public:
FlightSearchTree() : root(nullptr) {}
void insert(const FlightNode& node);
FlightNode* search(const std::string& fromCity, const std::string& toCity);
private:
TreeNode* root;
};
```
4. 实现插入节点方法。这里我们以航班号为关键字进行插入,根据二叉搜索树的性质,比当前节点小的节点在左子树,比当前节点大的节点在右子树。
```c++
void FlightSearchTree::insert(const FlightNode& node) {
TreeNode* newNode = new TreeNode;
newNode->data = new FlightNode(node);
newNode->left = nullptr;
newNode->right = nullptr;
if (root == nullptr) {
root = newNode;
return;
}
TreeNode* curNode = root;
while (curNode != nullptr) {
if (node.flightNo < curNode->data->flightNo) {
if (curNode->left == nullptr) {
curNode->left = newNode;
return;
}
curNode = curNode->left;
} else {
if (curNode->right == nullptr) {
curNode->right = newNode;
return;
}
curNode = curNode->right;
}
}
}
```
5. 实现查找节点方法。这里我们根据起飞城市和到达城市进行查找,如果当前节点的航班信息匹配,则返回该节点的航班信息。
```c++
FlightNode* FlightSearchTree::search(const std::string& fromCity, const std::string& toCity) {
TreeNode* curNode = root;
while (curNode != nullptr) {
if (fromCity < curNode->data->fromCity) {
curNode = curNode->left;
} else if (fromCity > curNode->data->fromCity) {
curNode = curNode->right;
} else if (toCity < curNode->data->toCity) {
curNode = curNode->left;
} else if (toCity > curNode->data->toCity) {
curNode = curNode->right;
} else {
return curNode->data;
}
}
return nullptr;
}
```
这样,我们就可以使用二叉搜索树来实现航班查询了。调用航班查询方法时,传入起飞城市和到达城市即可查询到符合条件的航班信息。
阅读全文