1 Star 0 Fork 0

yuhang2__2/LeetCode-Solutions

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
kth-ancestor-of-a-tree-node.cpp 1.16 KB
一键复制 编辑 原始数据 按行查看 历史
// Time: ctor: O(n * logh)
// get: O(logh)
// Space: O(n * logh)
// binary jump solution (frequently used in competitive programming)
class TreeAncestor {
public:
TreeAncestor(int n, vector<int>& parent) {
vector<int> q;
for (const auto& p : parent) {
parent_.emplace_back(vector<int>(p != -1, p));
if (p != -1) {
q.emplace_back(parent_.size() - 1);
}
}
for (int i = 0; !q.empty(); ++i) {
vector<int> new_q;
for (const auto& curr : q) {
if (!(i < parent_[parent_[curr][i]].size())) {
continue;
}
parent_[curr].emplace_back(parent_[parent_[curr][i]][i]);
new_q.emplace_back(curr);
}
q = move(new_q);
}
}
int getKthAncestor(int node, int k) {
for (; k; k -= k & ~(k - 1)) {
int i = __builtin_ctz(k & ~(k - 1));
if (!(i < parent_[node].size())) {
return -1;
}
node = parent_[node][i];
}
return node;
}
private:
vector<vector<int>> parent_;
};
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/yuhang2__2/LeetCode-Solutions.git
git@gitee.com:yuhang2__2/LeetCode-Solutions.git
yuhang2__2
LeetCode-Solutions
LeetCode-Solutions
master

搜索帮助