Skip to content

Commit 406e79e

Browse files
committed
leetcode
1 parent 484cc91 commit 406e79e

1 file changed

Lines changed: 62 additions & 0 deletions

File tree

数据结构与算法/算法题总结.md

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12651,6 +12651,68 @@ private:
1265112651
};
1265212652
```
1265312653

12654+
以树构建graph(节点与左右子节点连通),然后从target节点开始以BFS的方式遍历graph,深度为K的节点就是结果:
12655+
```
12656+
/**
12657+
* Definition for a binary tree node.
12658+
* struct TreeNode {
12659+
* int val;
12660+
* TreeNode *left;
12661+
* TreeNode *right;
12662+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
12663+
* };
12664+
*/
12665+
class Solution {
12666+
public:
12667+
vector<int> distanceK(TreeNode* root, TreeNode* target, int k) {
12668+
unordered_map<TreeNode*, vector<TreeNode*> > m;
12669+
buildGraph(root, m);
12670+
12671+
deque<TreeNode *> res;
12672+
res.push_back(target);
12673+
12674+
while(k && !res.empty()) {
12675+
int sz = res.size();
12676+
--k;
12677+
for (int i = 0; i < sz; i++) {
12678+
TreeNode *nd = res.front();
12679+
res.pop_front();
12680+
12681+
for (TreeNode *next : m[nd]) {
12682+
if (m.find(next) != m.end()) {
12683+
res.push_back(next);
12684+
}
12685+
}
12686+
m.erase(nd); // remove visited node
12687+
}
12688+
}
12689+
12690+
vector<int> res_values(res.size());
12691+
for (int i = 0; i < res.size(); i++) {
12692+
res_values[i] = res[i]->val;
12693+
}
12694+
return res_values;
12695+
}
12696+
private:
12697+
void buildGraph(TreeNode *nd, unordered_map<TreeNode*, vector<TreeNode*> > &m) {
12698+
if (!nd) {
12699+
return;
12700+
}
12701+
12702+
if (nd->left) {
12703+
m[nd].push_back(nd->left);
12704+
m[nd->left].push_back(nd);
12705+
buildGraph(nd->left, m);
12706+
}
12707+
if (nd->right) {
12708+
m[nd].push_back(nd->right);
12709+
m[nd->right].push_back(nd);
12710+
buildGraph(nd->right, m);
12711+
}
12712+
}
12713+
};
12714+
```
12715+
1265412716
<br>
1265512717
<br>
1265612718

0 commit comments

Comments
 (0)