力扣(LeetCode)863

栏目: 编程工具 · 发布时间: 5年前

内容简介:题目地址:题目描述:

题目地址:

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 List<Integer> distanceK(TreeNode root, TreeNode target, int K) {
        List<Integer> ans = new ArrayList(1000);
      
        HashMap<TreeNode,List<TreeNode>>map = new HashMap(1<<10);
        dfs1(root,map);
        dfs2(root,map);
        ArrayDeque<TreeNode> deque = new ArrayDeque(100);
        HashSet<TreeNode>set = new HashSet(1<<10);
        HashMap<TreeNode,Integer> 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<TreeNode,Integer> entry:map2.entrySet())
            if(entry.getValue() == K)ans.add(entry.getKey().val);
        return ans;
        
        
    }
    void dfs1(TreeNode root,HashMap<TreeNode,List<TreeNode>>map)
    {
        if(root == null)return;
        map.put(root,new ArrayList(100));
        dfs1(root.left,map);
        dfs1(root.right,map);
    }
    
    void dfs2(TreeNode root,HashMap<TreeNode,List<TreeNode>>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);
        
    }
    
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Algorithms on Strings, Trees and Sequences

Algorithms on Strings, Trees and Sequences

Dan Gusfield / Cambridge University Press / 1997-5-28 / USD 99.99

String algorithms are a traditional area of study in computer science. In recent years their importance has grown dramatically with the huge increase of electronically stored text and of molecular seq......一起来看看 《Algorithms on Strings, Trees and Sequences》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具