863. 二叉树中所有距离为 K 的结点
給定一個二叉樹(具有根結(jié)點?root),?一個目標(biāo)結(jié)點?target?,和一個整數(shù)值 K 。
返回到目標(biāo)結(jié)點 target 距離為 K 的所有結(jié)點的值的列表。 答案可以以任何順序返回。
?
示例 1:
輸入:root = [3,5,1,6,2,0,8,null,null,7,4], target = 5, K = 2
輸出:[7,4,1]
解釋:
所求結(jié)點為與目標(biāo)結(jié)點(值為 5)距離為 2 的結(jié)點,
值分別為 7,4,以及 1
注意,輸入的 "root" 和 "target" 實際上是樹上的結(jié)點。
上面的輸入僅僅是對這些對象進(jìn)行了序列化描述。
提示:
給定的樹是非空的,且最多有?K?個結(jié)點。
樹上的每個結(jié)點都具有唯一的值?0 <= node.val <= 500?。
目標(biāo)結(jié)點?target?是樹上的結(jié)點。
0 <= K <= 1000.
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/all-nodes-distance-k-in-binary-tree
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
解法:
/*** 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 { public:vector<int> distanceK(TreeNode* root, TreeNode* target, int K) {if(!root) return {};unordered_map<TreeNode*, vector<TreeNode *>> mp;queue<TreeNode *> qu;solution(root, nullptr, mp);qu.push(target);set<TreeNode *> s;s.insert(target);vector<int> res;while(!qu.empty()){if(K == 0){while(!qu.empty()){res.push_back(qu.front()->val);qu.pop();}return res;}int n = qu.size();while(n--){auto it = qu.front();qu.pop();for(auto c : mp[it]){if(s.find(c) != s.end()) continue;qu.push(c);s.insert(c);}}K--;}return {}; }void solution(TreeNode *root, TreeNode *pre, unordered_map<TreeNode*, vector<TreeNode *>> &mp){if(root == nullptr) return;if(pre && root){mp[pre].push_back(root);mp[root].push_back(pre);}solution(root->left, root, mp);solution(root->right, root, mp);} };?
總結(jié)
以上是生活随笔為你收集整理的863. 二叉树中所有距离为 K 的结点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前妻回家剧情介绍
- 下一篇: 实验3 | 由遍历序列构造二叉树