C++实现树的创建和输出 (1)从键盘输入树的数据,从显示器上输出树; (2)从磁盘文件读取数据建立树,将树的数据输出到文件中; (3)实现Tree类的成员函数:
时间: 2024-11-24 21:40:25 浏览: 3
在C++中,我们可以使用结构体或类来表示树的节点,并利用指针来连接节点形成树形结构。以下是基本步骤:
1. **创建树节点**:
```cpp
class TreeNode {
public:
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
```
这里我们定义了一个简单的二叉树节点类,包含整数值`val`,以及指向左子树和右子树的指针。
2. **创建树并输入数据**:
为了从键盘接收数据,你可以使用`cin`获取值,并递归地添加到树中:
```cpp
void createTree(TreeNode*& root, int val) {
if (!root) {
root = new TreeNode(val);
} else if (val < root->val) {
createTree(root->left, val);
} else {
createTree(root->right, val);
}
}
int main() {
TreeNode* root = nullptr;
int n;
cout << "Enter number of nodes: ";
cin >> n;
for (int i = 0; i < n; ++i) {
int val;
cout << "Enter value for node " << i+1 << ": ";
cin >> val;
createTree(root, val);
}
// 输出树可以使用中序遍历或其他适合的算法
}
```
3. **输出树**:
常见的输出方法有前序、中序或后序遍历。例如,中序遍历时会先输出左子树,然后当前节点,最后右子树。下面是一个简单的中序遍历示例:
```cpp
void inorderTraversal(TreeNode* node) {
if (node) {
inorderTraversal(node->left);
cout << node->val << " ";
inorderTraversal(node->right);
}
}
// 在main中调用这个函数
inorderTraversal(root);
```
4. **从文件读取和写入**:
对于从磁盘文件读取和写入,你需要提供相应的I/O操作。读取时,解析每个值创建节点;写入时,需要将节点按某种顺序转换为字符串,如序列化成文本格式存储。这里仅给出读取部分的一个简化示例:
```cpp
std::string readFromFile(const std::string& filename) {
// 读取文件内容...
// 这里假设已经处理好格式,返回一个字符串列表
std::vector<int> values;
// ... 然后将每个值添加到树中
for (const auto& val : values) {
createTree(root, val);
}
}
```
同样,写入文件可以使用类似的方法。
阅读全文