zoukankan      html  css  js  c++  java
  • LeetCode 863. 二叉树中所有距离为 K 的结点

    题目链接

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

    题目思想

    一开始把这个题当做树的类型来做,结果是毫无思路。只好将树转成图,然后再从target出发,dfs寻找距离等于k的点。
    因为树中的数值不是固定的,我们使用HashMap来存放邻接链表(为了省空间)。
    利用一个方法,通过前序遍历的思路建立图,注意我们这个图应该是一个无向图。
    在建立完邻接链表后,我们需要做的就是从target出发,去深搜距离等于k的点即可。

    代码实现

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        HashMap<Integer, List<Integer>> map = new HashMap<>();
        List<Integer> res = new ArrayList<>();
        HashSet<Integer> set = new HashSet<>();
        public List<Integer> distanceK(TreeNode root, TreeNode target, int K) {
            buildGraph(root);
            find(target.val, K);
            return res;
        }
    
        public void buildGraph(TreeNode root){
            if(root == null){
                return;
            }
            if(!map.containsKey(root.val)){
                map.put(root.val, new ArrayList<>());
            }
            if(root.left != null){
                map.get(root.val).add(root.left.val);
                map.put(root.left.val, new ArrayList<>());
                map.get(root.left.val).add(root.val);
            }
            if(root.right != null){
                map.get(root.val).add(root.right.val);
                map.put(root.right.val, new ArrayList<>());
                map.get(root.right.val).add(root.val);
            }
            buildGraph(root.left);
            buildGraph(root.right);
        }
    
        public void find(Integer start, int k){
            if(set.contains(start)){
                return;
            }
            if(k == 0){
                res.add(start);
                return;
            }
            List<Integer> list = map.get(start);
            set.add(start);
            for(int i = 0; i < list.size(); i++){
                find(list.get(i), k - 1);
            }
        }
    }
    

    总结

    有时候做题不要那么死板。。
    通过截图

  • 相关阅读:
    Java 多线程之CyclicBarrier
    数据库事务隔离级别
    Java SE之Map接口
    (二)Shiro之一些重要的组件和工具类
    (一)Shiro之简介
    Datatables后端分页
    Spring之BeanFactory中Bean的生命周期
    Servlet之生命周期
    设计模式之单例设计模式
    day041 前端HTML CSS基本选择器(未整理完毕)
  • 原文地址:https://www.cnblogs.com/ZJPaang/p/13823647.html
Copyright © 2011-2022 走看看