最开始的想法是写成一个二维数组,然后通过走几步到这样的写法来实现,最后发现他不是一个满秩矩阵,一些为null的地方在走dfs时会出错。
在看了看后面的题解后惊为天人,那是什么大佬在里面畅游呀,,哪完美的解法,找不到一丝的瑕疵,在极短的时间里,却用消耗内存最底的方法写了出来。(删除这段)
建立一个图。相邻节点的距离设置为1。
graph[root->val][root->right->val] = 1;
graph[root->right->val][root->val] = 1;
graph[root->val][root->left->val] = 1;
graph[root->left->val][root->val] = 1;
并递归找下去,知道为Null。
void treeTograph(TreeNode* root)
{
if(root->left)
{
graph[root->val][root->left->val] = 1;
graph[root->left->val][root->val] = 1;
treeTograph(root->left);
}
if (root->right)
{
graph[root->val][root->right->val] = 1;
graph[root->right->val][root->val] = 1;
treeTograph(root->right);
}
}
在图建好后进行dfs进行查找。以及搜寻,存入队列中,在结束后,输出。当然需要一个,判断是否重复的过程,如果走过再走的话,会出现错误。。。
vis[v] = true;
if (deep == k)
{
res.push_back(v);
return;
}
for(int i=0;i<N;i++)
{
if(vis[i] == false && graph[v][i] == 1)
dfs(i,deep+1,k);
}