现在航班信息是用scanf函数获取的如何用已获取的航班信息创建二叉树
时间: 2024-02-12 20:04:46 浏览: 75
创建二叉树
好的,如果航班信息是通过 `scanf` 函数获取的,我们可以按照以下步骤来创建二叉搜索树:
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++
FlightSearchTree flightSearchTree;
while (true) {
FlightNode node;
int result = scanf("%s %s %s %s",
&node.fromCity[0], &node.toCity[0], &node.flightNo[0], &node.departureTime[0]);
if (result != 4) {
break;
}
flightSearchTree.insert(node);
}
```
5. 实现插入节点方法。这里我们以航班号为关键字进行插入,根据二叉搜索树的性质,比当前节点小的节点在左子树,比当前节点大的节点在右子树。
```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;
}
}
}
```
这样,我们就可以使用已获取的航班信息来创建二叉搜索树了。在读取完所有的航班信息后,我们就可以使用航班查询方法来查询符合条件的航班信息了。
阅读全文