@@ -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