Leetcode 863. 二叉树中所有距离为 K 的结点
- 用户通过次数39
- 用户尝试次数59
- 通过次数39
- 提交次数174
- 题目难度Medium
给定一个二叉树(具有根结点 root), 一个目标结点 target ,和一个整数值 K 。
返回到目标结点 target 距离为 K 的所有结点的值的列表。 答案可以以任何顺序返回。
示例 1:
输入:root = [3,5,1,6,2,0,8,null,null,7,4], target = 5, K = 2 输出:[7,4,1] 解释:
所求结点为与目标结点(值为 5)距离为 2 的结点,
值分别为 7,4,以及 1

注意,输入的 "root" 和 "target" 实际上是树上的结点。
上面的输入仅仅是对这些对象进行了序列化描述。
提示:
- 给定的树是非空的,且最多有
K个结点。 - 树上的每个结点都具有唯一的值
0 <= node.val <= 500。 - 目标结点
target是树上的结点。 0 <= K <= 1000.
/**
* 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:
map<TreeNode*,TreeNode*> mp;
void findparent(TreeNode* root){
if(root == NULL)return;
if(root->left){
mp[root->left] = root;
findparent(root->left);
}
if(root->right){
mp[root->right] = root;
findparent(root->right);
}
return;
} void dfs(TreeNode* target,int k,set<TreeNode*> vis,vector<int>& res){
if(vis.find(target)!=vis.end()) return;//visit.end()表示集合中没有找到
vis.insert(target);
if(k == ){res.push_back(target->val);return;}
if(target->left) dfs(target->left,k-,vis,res);
if(target->right) dfs(target->right,k-,vis,res);
TreeNode* p = mp[target];
if(p) dfs(p,k-,vis,res);
}
vector<int> distanceK(TreeNode* root, TreeNode* target, int K) {
if(root == NULL) return{};
findparent(root);
vector<int> res;
set<TreeNode*> vis;
dfs(target,K,vis,res);
return res;
}
};
__学习了set用法,用map保存根节点。
Leetcode 863. 二叉树中所有距离为 K 的结点的更多相关文章
- Leetcode——863.二叉树中所有距离为 K 的结点
给定一个二叉树(具有根结点 root), 一个目标结点 target ,和一个整数值 K . 返回到目标结点 target 距离为 K 的所有结点的值的列表. 答案可以以任何顺序返回. 示例 1: 输 ...
- 【前缀思想】二叉树中所有距离为 K 的结点
863. 二叉树中所有距离为 K 的结点 class Solution { Map<TreeNode,String>map=new HashMap<>(); String pa ...
- [Swift]LeetCode863. 二叉树中所有距离为 K 的结点 | All Nodes Distance K in Binary Tree
We are given a binary tree (with root node root), a targetnode, and an integer value K. Return a lis ...
- 链表中获取倒数第K个结点
/* * 链表中查找倒数第K个结点.cpp * * Created on: 2018年5月1日 * Author: soyo */ #include<iostream> using nam ...
- 链表习题(8)-寻找单链表中数据域大小为k的结点,并与前一结点交换,如果前一结点存在的情况下
/*寻找单链表中数据域大小为k的结点,并与前一结点交换,如果前一结点存在的情况下*/ /* 算法思想:定义两个指针,pre指向前驱结点,p指向当前结点,当p->data == k的时候,交换 p ...
- LeetCode 230.二叉树中第k小的元素
题目: 给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素. 说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数. 这道题在leetCode上难 ...
- LeetCode 671. 二叉树中第二小的节点(Second Minimum Node In a Binary Tree) 9
671. 二叉树中第二小的节点 671. Second Minimum Node In a Binary Tree 题目描述 给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 ...
- Leetcode Lect4 二叉树中的分治法与遍历法
在这一章节的学习中,我们将要学习一个数据结构——二叉树(Binary Tree),和基于二叉树上的搜索算法. 在二叉树的搜索中,我们主要使用了分治法(Divide Conquer)来解决大部分的问题. ...
- Leetcode 671.二叉树中第二小的节点
二叉树中第二小的节点 给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0.如果一个节点有两个子节点的话,那么这个节点的值不大于它的子节点的值. 给出这样的一个二叉树 ...
随机推荐
- AngularJS 笔记1
2017-03-23 本文更新链接: http://www.cnblogs.com/daysme/p/6606805.html 什么是 angularjs 2009年有两个外国人创建,后由谷歌收购并开 ...
- 4、Python文件对象及os、os.path和pickle模块(0530)
文件系统和文件 1.文件系统是OS用于明确磁盘或分区上的文件的方法和数据结构---即在磁盘上组织文件的方法: 文件系统模块:os 2.计算机文件(称文件.电脑档案.档案),是存储在某种长期储存设备或临 ...
- HDU 4825 Xor Sum(01字典树入门题)
http://acm.hdu.edu.cn/showproblem.php?pid=4825 题意: 给出一些数,然后给出多个询问,每个询问要从之前给出的数中选择异或起来后值最大的数. 思路:将给出的 ...
- linux 进阶命令笔记(12月26日)
1. df 指令 作用:查看磁盘空间 用法: #df -h -h 表示以可读性较高的形式展示大小 2.free 指令 作用:查看内存使用情况 语法:#free -m -m表 ...
- QT读文件夹内所有文件名
void monizhuzhan::filenameInDir() { //判断路径是否存在 QDir dir(path); if(!dir.exists()) return; //查看路径中后缀为. ...
- Centos7安装配置Apache+PHP+Mysql+phpmyadmin
转载自: Centos7安装配置Apache+PHP+Mysql+phpmyadmin 一.安装Apache yum install httpd 安装成功后,Apache操作命令: systemctl ...
- leecode第二题(两数相加)
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode ...
- 学习笔记18—circos应用集
一.在线画图(行列分别最大为75) 相信大家都听说过circos图,但是亲自画过的人可能就很少,这主要因为软件的安装和使用稍微有一点麻烦.其实,circos图也是可以在线绘制的,这样就简单多了!一起来 ...
- Java 8新特性探究(二)深入解析默认方法
什么是默认方法,为什么要有默认方法 简单说,就是接口可以有实现方法,而且不需要实现类去实现其方法.只需在方法名前面加个default关键字即可. 为什么要有这个特性?首先,之前的接口是个双刃剑,好处是 ...
- cocos2dx spine之二 :spine变色
cocos2dx版本为3.10 1.具体原理和代码可以参考博文<利用shader改变图片色相Hue>,下面的代码根据该博文进行整理优化. 基本原理就是将RGB值转换为HSL值后加上输入的H ...