二叉树中所有距离为K的节点(DFS+BFS)
问题:
思路:
为找到与节点距离为K的节点,需解决节点回溯到其父节点的问题,因此需知道每个节点的父节点,使用哈希表进行保存,通过DFS建立此哈希表
将target节点push到队列中,进行三个方向的BFS(左孩子、右孩子、父节点),为防止重复访问节点,需使用set保存已访问过的节点
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
private:
unordered_map< TreeNode*,TreeNode* > table;
public:
void dfs( TreeNode* root,TreeNode* pre )
{
if( root )
{
table[root]=pre;
dfs( root->left,root );
dfs( root->right,root );
}
}
vector<int> distanceK(TreeNode* root, TreeNode* target, int K) {
dfs( root,NULL );
queue< TreeNode* > q;
TreeNode* p=target;
q.push( p );
vector<int> ans;
unordered_set< TreeNode* > visited;
int k=0;
while( !q.empty() )
{
int size=q.size();
while( size-- )
{
p=q.front();
if( k==K )
ans.push_back( p->val );
q.pop();
visited.insert( p );
if( p->left && visited.count( p->left )==0 )
{
q.push( p->left );
visited.insert( p->left );
}
if( p->right && visited.count( p->right )==0 )
{
q.push( p->right );
visited.insert( p->right );
}
if( table.count( p )==1 && visited.count( table[p] )==0 && table[p]!=NULL )
{
q.push( table[p] );
visited.insert( table[p] );
}
}
k++;
}
return ans;
}
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/153823.html