863. 二叉树中所有距离为 K 的结点

首先要将二叉树转换成图,再用bfs做。
1,二叉树转换成图
用哈希表存当前节点和与其相连的点;
通过当前节点于其父节点实现遍历;
点击查看代码
unordered_map<TreeNode*, vector<TreeNode*>> graph;
void createGraph(TreeNode* node, TreeNode* parent) {
if (!node) return;
if (parent) {
graph[node].push_back(parent);
graph[parent].push_back(node);
}
createGraph(node->left, node);
createGraph(node->right, node);
}
完整代码:
点击查看代码
class Solution {
public:
unordered_map<TreeNode*, vector<TreeNode*>> graph;
void createGraph(TreeNode* node, TreeNode* parent) {
if (!node) return;
if (parent) {
graph[node].push_back(parent);
graph[parent].push_back(node);
}
createGraph(node->left, node);
createGraph(node->right, node);
}
vector<int> distanceK(TreeNode* root, TreeNode* target, int k) {
createGraph(root, nullptr);
queue<TreeNode*> q;
q.push(target);
unordered_set<TreeNode*> visited;
visited.insert(target);
while (!q.empty() && k > 0) {
int size = q.size();
for (int i = 0; i < size; i++) {
TreeNode* node = q.front();
q.pop();
for (TreeNode* neighbor : graph[node]) {
if (visited.find(neighbor) == visited.end()) {
q.push(neighbor);
visited.insert(neighbor);
}
}
}
k--;
}
vector<int> result;
while (!q.empty()) {
TreeNode* node = q.front();
q.pop();
result.push_back(node->val);
}
return result;
}
};

浙公网安备 33010602011771号