力扣labuladong——一刷day66

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言


这道题常规的解法就是把二叉树变成一幅「图」,然后在图中用 BFS 算法求距离 target 节点 k 步的所有节点。

一、力扣919. 完全二叉树插入器

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class CBTInserter {
   
    private TreeNode root;
    private Deque<TreeNode> deq = new ArrayDeque<>();
    public CBTInserter(TreeNode root) {
   
        this.root = root;
        Deque<TreeNode> temp = new ArrayDeque<>();
        temp.offerLast(root);
        while(!temp.isEmpty()){
   
            int size = temp.size();
            for(int i = 0; i < size; i ++){
   
                TreeNode cur = temp.pollFirst();
                if(cur.left != null){
   
                    temp.offerLast(cur.left);
                }
                if(cur.right != null){
   
                    temp.offerLast(cur.right);
                }
                if(cur.left == null || cur.right == null){
   
                    deq.offerLast(cur);
                }
            }
        }
    }
    
    public int insert(int val) {
   
        TreeNode p = new TreeNode(val);
        TreeNode cur = deq.peekFirst();
        if(cur.left == null){
   
            cur.left = p;
        }else{
   
            cur.right = p;
            deq.pollFirst();
        }
        deq.offerLast(p);
        return cur.val;
    }
    
    public TreeNode get_root() {
   
        return this.root;
    }
}

/**
 * Your CBTInserter object will be instantiated and called as such:
 * CBTInserter obj = new CBTInserter(root);
 * int param_1 = obj.insert(val);
 * TreeNode param_2 = obj.get_root();
 */

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

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
   
    Map<Integer,TreeNode> map = new HashMap<>();
    public List<Integer> distanceK(TreeNode root, TreeNode target, int k) {
   
        fun(root,null);
        HashSet<Integer> visited = new HashSet<>();
        List<Integer> res = new ArrayList<>();
        Deque<TreeNode> deq = new ArrayDeque<>();
        int len = 0;
        deq.offerLast(target);
        visited.add(target.val);
        while(!deq.isEmpty()){
   
            int size = deq.size();
            for(int i = 0; i < size; i ++){
   
                TreeNode temp = deq.pollFirst();
                if(len == k){
   
                    res.add(temp.val);
                }
                TreeNode parent = map.get(temp.val);
                if(parent != null && !visited.contains(parent.val)){
   
                    visited.add(parent.val);
                    deq.offerLast(parent);
                }
                if(temp.left != null && !visited.contains(temp.left.val)){
   
                    visited.add(temp.left.val);
                    deq.offerLast(temp.left);
                }
                if(temp.right != null && !visited.contains(temp.right.val)){
   
                    visited.add(temp.right.val);
                    deq.offerLast(temp.right);
                }
            }
            len ++;
        }
        return res;
    }
    public void fun(TreeNode root, TreeNode parent){
   
        if(root == null){
   
            return;
        }
        map.put(root.val,parent);
        fun(root.left,root);
        fun(root.right,root);
    }
}

相关推荐

  1. labuladong——day66

    2023-12-13 01:40:02       51 阅读
  2. labuladong——day68

    2023-12-13 01:40:02       56 阅读
  3. labuladong——day67

    2023-12-13 01:40:02       60 阅读
  4. labuladong——day69

    2023-12-13 01:40:02       56 阅读
  5. labuladong——day70

    2023-12-13 01:40:02       62 阅读
  6. labuladong——day74

    2023-12-13 01:40:02       55 阅读
  7. labuladong——day75

    2023-12-13 01:40:02       54 阅读
  8. labuladong——day76

    2023-12-13 01:40:02       69 阅读
  9. labuladong——day77

    2023-12-13 01:40:02       50 阅读
  10. labuladong——day78

    2023-12-13 01:40:02       64 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-13 01:40:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-13 01:40:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-13 01:40:02       82 阅读
  4. Python语言-面向对象

    2023-12-13 01:40:02       91 阅读

热门阅读

  1. SpringBoot 面试题和答案,最新面经

    2023-12-13 01:40:02       53 阅读
  2. 不容错过的计算机网络知识点解密!

    2023-12-13 01:40:02       48 阅读
  3. 从理论分析高可用

    2023-12-13 01:40:02       51 阅读
  4. 微信小程序如何跳转到网页

    2023-12-13 01:40:02       52 阅读
  5. 青蛙跳台阶(C语言)

    2023-12-13 01:40:02       56 阅读
  6. 基于深度学习的热红外图像增强算法

    2023-12-13 01:40:02       52 阅读
  7. SpringBoot整合easyExcel实现CSV格式文件的导入导出

    2023-12-13 01:40:02       68 阅读
  8. openEuler学习05-kernel升级

    2023-12-13 01:40:02       41 阅读