给定一个二叉树(具有根结点 root), 一个目标结点 target ,和一个整数值 K 。
返回到目标结点 target 距离为 K 的所有结点的值的列表。 答案可以以任何顺序返回。
方法1. BFS
二叉树转化为图的操作 buildtree
class Solution {
private:
unordered_map<TreeNode *,vector<TreeNode *>> g;
void buildtree(TreeNode * parent,TreeNode *child){
if(parent){
g[parent].push_back(child);
g[child].push_back(parent);
}
if(child->left) buildtree(child,child->left);
if(child->right) buildtree(child,child->right);
}
public:
vector<int> distanceK(TreeNode* root, TreeNode* target, int K) {
vector<int> ans;
buildtree(NULL,root);
unordered_set<TreeNode *> visit;
queue<TreeNode *> qu;
qu.push(target);
visit.insert(target);
int k=0;
while(!qu.empty() && k<=K){
int len=qu.size();
while(len--){
TreeNode * cur=qu.front();qu.pop();
if(k==K) ans.push_back(cur->val);
for(TreeNode * x:g[cur]){
if(visit.count(x)==0){
qu.push(x);
visit.insert(x);
}
}
}
k++;
}
return ans;
}
};