题目描述:
We are given a binary tree (with root node root), a target node, and an integer value K.
Return a list of the values of all nodes that have a distance K from the target node. The answer can be returned in any order.
Example 1:
Input: root = [3,5,1,6,2,0,8,null,null,7,4], target = 5, K = 2 Output: [7,4,1] Explanation: The nodes that are a distance 2 from the target node (with value 5) have values 7, 4, and 1. Note that the inputs "root" and "target" are actually TreeNodes. The descriptions of the inputs above are just serializations of these objects.
Note:
- The given tree is non-empty.
- Each node in the tree has unique values
0 <= node.val <= 500. - The
targetnode is a node in the tree. 0 <= K <= 1000.
class Solution {
public:
vector<int> distanceK(TreeNode* root, TreeNode* target, int K) {
if(K==0) return {target->val};
unordered_map<TreeNode*,vector<TreeNode*>> graph;
queue<TreeNode*> q;
q.push(root);
while(!q.empty()) // 层序遍历构造图
{
TreeNode* node=q.front();
q.pop();
if(node->left)
{
graph[node].push_back(node->left);
graph[node->left].push_back(node);
q.push(node->left);
}
if(node->right)
{
graph[node].push_back(node->right);
graph[node->right].push_back(node);
q.push(node->right);
}
}
// 构造好图之后,从target开始BFS
vector<int> result;
q.push(target);
unordered_map<TreeNode*,int> dist;
dist[target]=0;
while(!q.empty())
{
TreeNode* node=q.front();
q.pop();
if(dist[node]==K)
{
result.push_back(node->val);
continue;
}
for(TreeNode* neighbor:graph[node])
{
if(dist.count(neighbor)) continue;
dist[neighbor]=dist[node]+1;
q.push(neighbor);
}
}
return result;
}
};
本文介绍了一种算法,用于在给定的二叉树中找到所有距离目标节点为K的节点值。通过构建图并使用BFS遍历,该算法能够有效地解决这一问题。
433

被折叠的 条评论
为什么被折叠?



