[抄题]:

We are given a binary tree (with root node root), a target node, and an integer value K.

Return a list of the values of all nodes that have a distance K from the target node.  The answer can be returned in any order.

Example 1:

Input: root = [3,5,1,6,2,0,8,null,null,7,4], target = 5, K = 2

Output: [7,4,1]

Explanation:
The nodes that are a distance 2 from the target node (with value 5)
have values 7, 4, and 1. Note that the inputs "root" and "target" are actually TreeNodes.
The descriptions of the inputs above are just serializations of these objects.

Note:

  1. The given tree is non-empty.
  2. Each node in the tree has unique values 0 <= node.val <= 500.
  3. The target node is a node in the tree.
  4. 0 <= K <= 1000.

[暴力解法]:

时间分析:

空间分析:

[优化后]:

时间分析:

空间分析:

[奇葩输出条件]:

[奇葩corner case]:

[思维问题]:

没啥思路,以为是dfs就可以了。但是其实分为两步:

存储:把root,左右长度存在map中

取出来:length每次加一,递增为k

[英文数据结构或算法,为什么不用别的数据结构或算法]:

[一句话思路]:

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

  1. map中存的距离是找出left之后,left+1
  2. 在map中找root之前要先判断是否有这个key

[二刷]:

[三刷]:

[四刷]:

[五刷]:

[五分钟肉眼debug的结果]:

[总结]:

先在左边右边用dfs生成长度,存map。再用dfs的length+1找出所有节点

[复杂度]:Time complexity: O(n) Space complexity: O(n)

[算法思想:迭代/递归/分治/贪心]:

[关键模板化代码]:

int left = find(root.left, target, K);
if (left >= 0) {
map.put(root, left + 1);
return left + 1;
}

[其他解法]:

[Follow Up]:

[LC给出的题目变变变]:

[代码风格] :

[是否头一次写此类driver funcion的代码] :

[潜台词] :

class Solution {
//initialization: hashmap
HashMap<TreeNode, Integer> map = new HashMap<TreeNode, Integer>(); public List<Integer> distanceK(TreeNode root, TreeNode target, int K) {
List<Integer> result = new ArrayList<Integer>();
find(root, target, K);
dfs(root, 0, target, K, result);
return result;
} //find and store length
public int find(TreeNode root, TreeNode target, int K) {
//corner case: root == null
if (root == null) return -1; //root.val == target
if (target == root) {
map.put(root, 0);
return 0;
} //define left, right and add
int left = find(root.left, target, K);
if (left >= 0) {
map.put(root, left + 1);
return left + 1;
}
int right = find(root.right, target, K);
if (right >= 0) {
map.put(root, right + 1);
return right + 1;
} return -1;
} //add the points to res
public void dfs(TreeNode root, int length, TreeNode target, int K, List<Integer> res) {
//corner case
if (root == null) return ; //get length if there is key
if (map.containsKey(root)) {
length = map.get(root);
}
//add to res
if (length == K) res.add(root.val); //dfs in left and right
dfs(root.left, length + 1, target, K, res);
dfs(root.right, length + 1, target, K, res);
}
}

863. All Nodes Distance K in Binary Tree 到制定节点距离为k的节点的更多相关文章

  1. 【LeetCode】863. All Nodes Distance K in Binary Tree 解题报告(Python)

    [LeetCode]863. All Nodes Distance K in Binary Tree 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http ...

  2. [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 ...

  3. LeetCode – All Nodes Distance K in Binary Tree

    We are given a binary tree (with root node root), a target node, and an integer value K. Return a li ...

  4. 距离为K的节点 All Nodes Distance K in Binary Tree

    2018-07-26 17:38:37 问题描述: 问题求解: 解法一. 第一种解法是使用Graph + BFS.换言之,就是将二叉树转化为无向图,然后在无向图中使用BFS进行层次遍历即可. 这种解法 ...

  5. the longest distance of a binary tree

    版权声明:欢迎查看本博客.希望对你有有所帮助 https://blog.csdn.net/cqs_2012/article/details/24880735 the longest distance ...

  6. leetcode 863. All Nodes Distance K in Binary Tree

    We are given a binary tree (with root node root), a target node, and an integer value K. Return a li ...

  7. [LC] 863. All Nodes Distance K in Binary Tree

    We are given a binary tree (with root node root), a target node, and an integer value K. Return a li ...

  8. 863. All Nodes Distance K in Binary Tree

    /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode ...

  9. [LeetCode] All Nodes Distance K in Binary Tree 二叉树距离为K的所有结点

    We are given a binary tree (with root node root), a target node, and an integer value K. Return a li ...

随机推荐

  1. Python开发 基礎知識 2.變量 ( *arg, **kwargs )

    變量 *args 和 **kwargs ( *和**為本體,名稱為通俗的名稱約定 ) *args 用於函式定義. 可將不定數量的參數傳遞給一個函數,傳入函式的引數,會先以Tuple物件收集,再設定給參 ...

  2. nomad 0.9 新特性

    内容摘自github Affinities and Spread: Jobs may now specify affinities towards certain node attributes. A ...

  3. 聊聊Java happens-before原则

    无论处理器.JVM.编译器都会都保证程序正确的前提下尽可能的对指令执行效率进行优化,进行指令重排等操作.而要保证程序的执行结果的正确,则必须要遵循JMM中规定的happens-before原则. 在J ...

  4. exec 与文件描述符

    参考http://blog.csdn.net/baoendemao/article/details/51638746 1:用法       exec 3<2.txt  以只读方式打开2.txt, ...

  5. Written a lua threadpool

    工作原理 由于lua只能单线程运行,该lib要求所有lua代码在单线程,而多线程部分只能为c代码 具体用法上要求多线程部分必须用c实现 相关模块 线程池 异步函数实现框架 Now only a sle ...

  6. QT QHttpMultiPart上传图片

    使用get请求或post请求可以传递简单的参数,但要上传图片到服务器,就要多做一些工作了,如下代码片段利用post请求可成功上传图片到服务器: QNetworkRequest request; req ...

  7. Delphi XE4 For IOS之部署问题

    在XE4中编写完程序后,怎么把相应的文件部署到ios虚拟机和真实机子中呢?下面就来说说. 首先选择你要部署的项目,选择Project->Deployment菜单 Deployment菜单打开如下 ...

  8. SpringSecurity-FilterSecurityInterceptor的作用

    FilterSecurityInterceptor也是很重要的一个interceptor,它的作用是对request进行权限判断,允许访问或者抛出accessDenied异常. 这个类继承Abstra ...

  9. 知识点:SQL中char、varchar、text区别

    Char为定长,varchar,text为变长. 1.CHAR.CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去1 ...

  10. 小程序打开pdf

    wx.downloadFile({ url:"https://xxxxxx.pdf", success(res){ console.log(res) let data = res. ...