小编Shi*_* Xu的帖子

如何从数组表示构建不完全二叉树

如果输入是数组,则null表示没有节点。

输入:

[1, 2, 3, null, 5, null, 7]

请假设我已经检查了输入。

对于每个array[i],其父项array[i / 2]不会是null(递归地,所以 root 不能是null)。

如何构建具有这种逻辑关系的树:

   1
 /    \
2      3
 \      \ 
  5      7
Run Code Online (Sandbox Code Playgroud)

每个节点都应该由一个TreeNode对象表示:

class TreeNode {
public:
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
Run Code Online (Sandbox Code Playgroud)

我在这里找到了一个博客,其中构建了一个完整的树

但是如果树如上所述不完整,如何整齐有效地完成它?

测试数据:

[输入数组]

[-64,12,18,-4,-53,null,76,null,-51,null,null,-93,3,null,-31,47,null,3,53,-81,33,4,null,-51,-44,-60,11,null,null,null,null,78,null,-35,-64,26,-81,-31,27,60,74,null,null,8,-38,47,12,-24,null,-59,-49,-11,-51,67,null,null,null,null,null,null,null,-67,null,-37,-19,10,-55,72,null,null,null,-70,17,-4,null,null,null,null,null,null,null,3,80,44,-88,-91,null,48,-90,-30,null,null,90,-34,37,null,null,73,-38,-31,-85,-31,-96,null,null,-18,67,34,72,null,-17,-77,null,56,-65,-88,-53,null,null,null,-33,86,null,81,-42,null,null,98,-40,70,-26,24,null,null,null,null,92,72,-27,null,null,null,null,null,null,-67,null,null,null,null,null,null,null,-54,-66,-36,null,-72,null,null,43,null,null,null,-92,-1,-98,null,null,null,null,null,null,null,39,-84,null,null,null,null,null,null,null,null,null,null,null,null,null,-93,null,null,null,98]

binary-tree data-structures

6
推荐指数
2
解决办法
6593
查看次数

C++ - 如何将元素从 std::priority_queue 复制到 std::vector

例如,我想从输入向量中挑选出第 k 个最大的元素。

我知道使用 QuickSelect std::nth_element 可以更好地完成。

我的问题是如何将 std::priority_queue 的底层容器 std::vector 复制到另一个向量,而不是解决这个编码问题。

priority_queue<int, vector<int>, greater<int>> pq;
for (int num : nums) {
    pq.push(num);
    if (pq.size() > k) {
        pq.pop();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的方法很愚蠢:

vector<int> res;
while (!pq.empty()) {
    res.push_back(pq.top());
    pq.pop();
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点?

我们可以这样做吗

vector<int> res = pq;
Run Code Online (Sandbox Code Playgroud)

前 k 个元素不需要排序。

c++ c++11

6
推荐指数
2
解决办法
1万
查看次数

C++ - 如何正确地将比较器传递给STL函数

我写了一PointCollection堂课.

PointCollection 持有一堆积分.

它有2个成员函数.

addPoint(Point point)

findNearestKPoints(Point center, int k)

每次findNearestKPoints调用时,center都会指定a来查找k周围最近的k点.

但它无法编译:

error: called object type 'bool (PointCollection::*)(const Point &, const Point &) const' is not a function or function pointer

怎么做正确?

我的代码作为参考:

struct Point {
    int val_;
    Point() {}
    Point(int val) : val_(val) {}
};

class PointCollection {
private:
    vector<Point> points_;
    Point center_;
public:
    PointCollection() {}
    virtual ~PointCollection() {}

    void addPoint(const Point &point) {
        points_.push_back(point);
    }

    bool compare(const Point &a, const Point &b) …
Run Code Online (Sandbox Code Playgroud)

c++ stl c++11

3
推荐指数
1
解决办法
557
查看次数

我需要将gopkg.lock添加到Git吗?

鉴于:

清单描述用户意图,锁描述计算输出。清单中具有锁所没有的灵活性...,因为“ branch”:“ master”约束将与现在发生的任何修订主HAPPENS相匹配,而锁被固定到特定的修订。

这种灵活性非常重要,因为它允许我们提供简单的命令(例如dep sure -update),可以在您指定的限制内为您管理更新过程,并且因为它允许您的项目(在其他人导入时)共同指定您自己的依赖项的约束。

参考:https : //github.com/golang/dep/blob/master/docs/FAQ.md

go

3
推荐指数
1
解决办法
1575
查看次数

用硬编码元素初始化std :: vector &lt;MyClass&gt;的最简单方法是什么?

我希望创建一个MyClass的向量,例如以下课程类。我希望将字符串数组作为课程名称传递。所以我写

struct Course {
    int id;
    string name;
    static int id_generator;

    Course() {}
    Course(string s);

};

Course::Course(string s) {
    name = s;
    id = id_generator++;
}
int Course::id_generator = 0;
Run Code Online (Sandbox Code Playgroud)

这有效

string course_names[] = {"Linux", "C++", "HTML", "HTML5", "NodeJS", "Shell", "Python"};
vector<Course> course_vector(begin(course_names), end(course_names));
Run Code Online (Sandbox Code Playgroud)

但这不是

vector<Course> course_vector = {"Linux", "C++", "HTML", "HTML5", "NodeJS", "Shell", "Python"};

error: could not convert ‘{"Linux", "C++", "HTML", "HTML5", "NodeJS", "Shell", "Python"}’ from ‘<brace-enclosed initializer list>’ to ‘std::vector<Course>’
Run Code Online (Sandbox Code Playgroud)

为什么?怎么做更好?

c++ initialization

1
推荐指数
1
解决办法
484
查看次数

标签 统计

c++ ×3

c++11 ×2

binary-tree ×1

data-structures ×1

go ×1

initialization ×1

stl ×1