arr.emplace_back(root, 1L);中的1L是什么
时间: 2024-04-19 17:29:19 浏览: 40
在 `arr.emplace_back(root, 1L)` 中,`1L` 是一个长整型字面量,表示数字 1 的类型为 `long` 或 `long int`。后缀 `L` 表示该数字是 `long` 类型的。
在这段代码中,`1L` 表示根节点的索引,即根节点的位置在完全二叉树中是第一个位置,因此将根节点和索引 `1L` 添加到 `arr` 向量中。这个索引用于后续计算每一层节点的位置和宽度。
相关问题
arr.emplace_back
arr.emplace_back 是C++标准库中的一个函数,用于在容器的末尾插入一个元素。它会通过构造一个新的元素并将其添加到容器中。
具体来说,emplace_back 函数接受一组参数,这些参数用于构造新元素的构造函数。然后,这个新元素被添加到容器的末尾。
这个函数在使用时比 push_back 更高效,因为它避免了额外的拷贝或移动操作。它直接在指定位置构造新元素,而不是创建临时对象然后再进行赋值。
请注意,arr 是一个容器(例如 vector、list 等),而 emplace_back 是这个容器的成员函数。所以你需要先定义一个容器对象(例如 std::vector<int> arr;),然后通过该对象调用 emplace_back 函数来插入元素。
希望对你有帮助!如果你有其他问题,请随时提问。
这段代码对比上面那段代码,哪里错了class Solution { public: int widthOfBinaryTree(TreeNode* root) { unsigned long long res=1; vector<pair<TreeNode*,unsigned long long>> arr; arr.emplace_back(root,1ull); if(!arr.empty()) { vector<pair<TreeNode*,unsigned long long>> temp; for(auto &[node,index] : arr) { if(node->left) { temp.emplace_back(node->left,index*2); } if(node->right) { temp.emplace_back(node->right,index*2+1); } } res=max(res,arr.back().second-arr[0].second+1); arr=move(temp); } return res; } };
这段代码与前面的代码相比,在逻辑上是有问题的。
在这段代码中,只有一个循环,没有包含在 `while` 循环中。因此,只会对根节点的子节点进行一次遍历,而没有对其他层的节点进行遍历。这将导致无法计算得到正确的二叉树宽度。
正确的实现应该是在一个 `while` 循环中,对每一层的节点进行遍历,并更新 `arr`,直到没有节点需要遍历。
此外,在代码中的 `arr.emplace_back(root,1ull)` 中,使用了 `1ull` 来表示索引。这是正确的写法,因为 `ull` 是无符号长整型字面量的写法,用来表示一个无符号长整型数值。
综上所述,这段代码中的问题是缺少了一个外层的 `while` 循环来遍历每一层的节点,并计算二叉树的宽度。
阅读全文