863. All Nodes Distance K in Binary Tree
题目大意:一颗二叉树,每一个节点都是不同的一个数字,现在问距离k节点距离是d的节点是哪些。
解题思路:先从根dfs一遍,将树变成图。之后从要求的点bfs即可。
#define mp make_pair
class Solution {
public:
vector<int> vt[1005];
void dfs(TreeNode* root)
{
int t = root->val;
if(root->left!=NULL)
{
vt[t].push_back(root->left->val);
vt[root->left->val].push_back(t);
dfs(root->left);
}
if(root->right!=NULL)
{
vt[t].push_back(root->right->val);
vt[root->right->val].push_back(t);
dfs(root->right);
}
}
vector<int> distanceK(TreeNode* root, TreeNode* target, int K) {
for(int i=0;i<1005;i++) vt[i].clear();
dfs(root);
vector<int> res;
int vis[1005]; memset(vis,0,sizeof(vis));
queue< pair<int,int> > qt;
qt.push( mp(target->val,0) ); vis[target->val] = 1;
while(!qt.empty())
{
auto tmp = qt.front(); qt.pop();
if(tmp.second==K)
{
res.push_back(tmp.first);
continue;
}
for(int i=0;i<vt[tmp.first].size();i++)
{
int t = vt[tmp.first][i];
if(vis[t] == 1) continue;
vis[t] = 1;
qt.push(mp(t,tmp.second+1));
}
}
return res;
}
};