两个很不错的帖子
1、字符串输入
函数介绍
cin
cin的原理,简单来讲,是有一个缓冲区,我们键盘输入的数据,会先存到缓冲区中,用cin可以从缓冲区中读取数据。
- 注意1:cin可以连续从键盘读入数据
- 注意2:cin以空格、tab、换行符作为分隔符
- 注意3:cin从第一个非空格字符开始读取,直到遇到分隔符结束读取
getline()
从cin中,也可以看出,当我们要求读取的字符串中间存在空格的时候,cin会读取不全整个字符串,这个时候,可以采用getline()函数来解决。
- 注意1:使用getline()函数的时候,需要包含头文件
- 注意2:getline()函数会读取一行,读取的字符串包括空格,遇到换行符结束
实例
1. 输入字符串,根据空格隔开,可输入多组字符串
string str;
while(cin >> str){
cout << str << endl;
}
输入:
abc def ghi
输出:
abc
def
ghi
2. 输入带空格的字符串
string a;
getline(cin,a)
2、二叉树的输入
- 一些例子:
https://dream.blog.csdn.net/article/details/129890340
https://dream.blog.csdn.net/article/details/132845646
https://sars2025.blog.csdn.net/article/details/132411209
https://sars2025.blog.csdn.net/article/details/132320444
https://sars2025.blog.csdn.net/article/details/131967036
更多分类可以看:https://fcqian.blog.csdn.net/article/details/129468409
力扣常规输入,转换为ACM模式
-
例子
-
转换思路:
从二叉树 推导到 序列 是层序遍历的过程,这里其实就是将 序列 转换为 二叉树,转换方法为:借助二叉树的链式存储。如果父节点的数组下标是i,那么它的左孩子下标就是i * 2 + 1,右孩子下标就是 i * 2 + 2。
-
实现代码:
#include <iostream> #include <vector> #include <queue> using namespace std; /*二叉树的定义*/ struct TreeNode { int val; TreeNode *left; TreeNode *right; }; TreeNode *newNode(int val) { TreeNode *node = (TreeNode *) malloc(sizeof(TreeNode)); node->val = val; node->left = node->right = NULL; return node; } /*根据数组构造二叉树*/ TreeNode *construct_binary_tree(const vector<int> &vec) { vector<TreeNode *> vecTree(vec.size(), NULL); TreeNode *root = NULL; /*把输入数值数组,先转化为二叉树节点数组*/ for (int i = 0; i < vec.size(); i++) { TreeNode *node = NULL; if (vec[i] != -1) node = newNode(vec[i]); vecTree[i] = node; if (i == 0) root = node; } /*构建二叉树各节点之间的关系*/ for (int i = 0; i * 2 + 1 < vec.size(); i++) { if (vecTree[i] != NULL) { vecTree[i]->left = vecTree[i * 2 + 1]; if (i * 2 + 2 < vec.size()) vecTree[i]->right = vecTree[i * 2 + 2]; } } return root; } /*层序打印打印二叉树,验证时使用*/ void print_binary_tree(TreeNode *root) { queue<TreeNode *> que; if (root != NULL) que.push(root); vector<vector<int>> result; while (!que.empty()) { int size = que.size(); vector<int> vec; for (int i = 0; i < size; i++) { TreeNode *node = que.front(); que.pop(); if (node != NULL) { vec.push_back(node->val); que.push(node->left); que.push(node->right); } /* 这里的处理逻辑是为了把null节点打印出来,用-1 表示null*/ else vec.push_back(-1); } result.push_back(vec); } for (int i = 0; i < result.size(); i++) { for (int j = 0; j < result[i].size(); j++) { cout << result[i][j] << " "; } cout << endl; } } int main() { /*用-1表示null*/ vector<int> vec = {4, 1, 6, 0, 2, 5, 7, -1, -1, -1, 3, -1, -1, -1, 8}; TreeNode *root = construct_binary_tree(vec); print_binary_tree(root); return 0; }