一、考察知识点
本题和二叉树关系也不大,关键是二叉树如何转化为无向图,与无向图的广度有限遍历的应用。
二、代码
class Solution {
public:
vector<int> distanceK(TreeNode* root, TreeNode* target, int k) {
buildGraph(NULL, root);
vector<int> ans;
unordered_set<TreeNode*> seen;
queue<TreeNode*> q;
seen.insert(target);
q.push(target);
int cur_k = 0;
while(!q.empty() && cur_k <= k){
int s = q.size();
while(s--){
TreeNode* node = q.front();
q.pop();
if (cur_k == k) ans.push_back(node->val);
for(TreeNode* child : g[node]){
if(seen.count(child)) continue;
q.push(child);
seen.insert(child);
}
}
++cur_k;
}
return ans;
}
private:
unordered_map<TreeNode*, vector<TreeNode*>> g;
void buildGraph(TreeNode* parent, TreeNode* child){
if(parent){
g[parent].push_back(child);
g[child].push_back(parent);
}
if (child->left) buildGraph(child, child->left);
if (child->right) buildGraph(child, child->right);
}
};
1.将二叉树转化为无向图。
2.进行广度优先遍历,将深度为2的所有元素push到ans中。