摘要:返回到目标结点距离为的所有结点的值的列表。答案可以以任何顺序返回。解答这一题显然是利用广度优先搜索来探测距离,然而树是一个有向图,我们需要一个无向图来进行广度优先搜索。距离不断增加,就可以找到每个节点和目标节点的距离。
题目地址:
https://leetcode-cn.com/probl...
题目描述:
给定一个二叉树(具有根结点 root), 一个目标结点 target ,和一个整数值 K 。
返回到目标结点 target 距离为 K 的所有结点的值的列表。 答案可以以任何顺序返回。
解答:
这一题显然是利用广度优先搜索来探测距离,然而树是一个有向图,我们需要一个无向图来进行广度优先搜索。
因此,先把树变成一个无向图,然后广度优先搜索这个无向图。距离不断增加,就可以找到每个节点和目标节点的距离。
java ac代码:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public ListdistanceK(TreeNode root, TreeNode target, int K) { List ans = new ArrayList(1000); HashMap >map = new HashMap(1<<10); dfs1(root,map); dfs2(root,map); ArrayDeque deque = new ArrayDeque(100); HashSet set = new HashSet(1<<10); HashMap map2 = new HashMap(1<<10); set.add(target); deque.offer(target); map2.put(target,0); while(!deque.isEmpty()) { TreeNode temp = deque.poll(); int num = map2.get(temp)+1; for(TreeNode node:map.get(temp)) if(!set.contains(node)) { set.add(node); deque.offer(node); map2.put(node,num); } } for(Map.Entry entry:map2.entrySet()) if(entry.getValue() == K)ans.add(entry.getKey().val); return ans; } void dfs1(TreeNode root,HashMap >map) { if(root == null)return; map.put(root,new ArrayList(100)); dfs1(root.left,map); dfs1(root.right,map); } void dfs2(TreeNode root,HashMap >map) { if(root == null)return; if(root.left != null) { map.get(root).add(root.left); map.get(root.left).add(root); } if(root.right != null) { map.get(root).add(root.right); map.get(root.right).add(root); } dfs2(root.left,map); dfs2(root.right,map); } }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/73046.html
摘要:图因此可以成为树,在所有可能的树中,具有最小高度的树被称为最小高度树。给出这样的一个图,写出一个函数找到所有的最小高度树并返回他们的根节点。因此使用一个数组代表每个节点的入度,若入度为就是叶子节点。 题目地址:https://leetcode-cn.com/probl...题目描述: 对于一个具有树特征的无向图,我们可选择任何一个节点作为根。图因此可以成为树,在所有可能的树中,具有最小...
摘要:关于递归这里提一两点递归基本有这几步递归的模板,终止条件,递归调用,逻辑处理。 ?作者简介:大家好,我是车神哥,府学路18号的车神? ?个人主页:应无所住而生...
摘要:对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。可以射出的弓箭的数量没有限制。弓箭一旦被射出之后,可以无限地前进。我们想找到使得所有气球全部被引爆,所需的弓箭的最小数量。解答这是一道区间覆盖问题,不太好说清楚,利用模板即可。 题目地址:https://leetcode-cn.com/probl...题目描述:在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方...
摘要:有效二叉搜索树定义如下节点的左子树只包含小于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。而我们二叉搜索树保证了左子树的节点的值均小于根节点的值,根节点的值均小于右子树的值,因此中序遍历以后得到的序列一定是升序序列。 ...
阅读 1271·2021-11-17 09:33
阅读 1736·2021-09-09 11:53
阅读 3192·2021-09-04 16:45
阅读 1369·2021-08-17 10:12
阅读 2376·2019-08-30 15:55
阅读 1775·2019-08-30 15:53
阅读 2401·2019-08-30 15:52
阅读 2553·2019-08-29 18:41