[英]C++ Taking multiple inputs for binary tree
我正在努力如何处理二叉树的多个输入。
输入格式为:
示例输入:
2
1
2 3
4 5 6 7
上述输入的图示:
1
/ \
/ \
2 3
/ \ / \
4 5 6 7
我想将这些值从第二行到最后一行放入向量中,但很难获得像上面这样的输入。
这是我尝试过的:
int main(void) {
vector<int> tree;
int lv, num;
int treeSize = 1;
cin >> lv;
for(int i = 0; i <= lv; i++) {
while(tree.size() < treeSize && cin >> num) {
tree.push_back(num);
}
treeSize += (i + 1) * 2;
}
return 0;
}
我的代码无法正常工作。 例如,上面的示例输入必须总共有 7 个节点,但是如果我在一行中输入太多数字作为输入,它就会超过 7 个节点。
在这种情况下,是否有任何适当的方法来获取输入?
代码一目了然。 我会在调试器中跟踪它。 恕我直言,您的代码有点困难。 我会像下面那样进行数组填充。
int main(void) {
vector<int> tree;
int lv, num;
cin >> lv;
for(int i = 0, lvSize = 1; i <= lv; i++; lvSize *= 2) {
for (int j = 0; j < lvSize; && cin >> num; j++) {
tree.push_back(num);
}
}
return 0;
}
由于您在向量中读取树,因此您知道元素的数量,并且可以进一步简化和减少代码。
int main(void) {
vector<int> tree;
int lv, num;
cin >> lv;
int size = (1 << (lv + 1)) - 1; // This is pow(2, lv + 1) - 1
for(int i = 0; i < size; i++) {
tree.push_back(num);
}
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.