码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode 863--二叉树中所有距离为 K 的结点

时间:2018-12-25 22:52:25      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:--   oid   ret   方法   parent   dfs   class   val   红黑树   

首先找到每个节点的父节点,利用map存储(map底层用红黑树实现,所以查找效率也高),这种方法客服了二叉树只能找到自己的儿子的缺点。

然后用dfs搜索的方法寻找目标节点。

代码如下:

class Solution {
public:
map<TreeNode*,TreeNode*> par;
void findparent(TreeNode* root){
if(!root) return;
if(root->left){
par[root->left]=root;
findparent(root->left);
}
if(root->right){
par[root->right]=root;
findparent(root->right);
}
}
void dfs(TreeNode* root,int k,set<TreeNode*> &visited,vector<int>&res){
if(visited.find(root)!=visited.end()) return;
visited.insert(root);
if(k==0){
res.push_back(root->val);
return;
}
if(root->left)
dfs(root->left,k-1,visited,res);
if(root->right)
dfs(root->right,k-1,visited,res);
TreeNode* p=par[root];
if(p)
dfs(p,k-1,visited,res);
}
vector<int> distanceK(TreeNode* root, TreeNode* target, int K) {
if(!root)
return {};
findparent(root);
vector<int> res;
set<TreeNode*> visited;
dfs(target,K,visited,res);
return res;
}
};

Leetcode 863--二叉树中所有距离为 K 的结点

标签:--   oid   ret   方法   parent   dfs   class   val   红黑树   

原文地址:https://www.cnblogs.com/jundima/p/10176815.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!