leetcode 865. Smallest Subtree with all the Deepest Nodes | 865.具有所有最深节点的最小子树(树的BFS,parent反向索引map)

2023-05-16

题目

https://leetcode.com/problems/smallest-subtree-with-all-the-deepest-nodes/
在这里插入图片描述

题解

/**
 * 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 Solution {
    public TreeNode subtreeWithAllDeepest(TreeNode root) {
        // 层序遍历,记录最深层
        Queue<TreeNode> preQueue = new LinkedList<>();
        Queue<TreeNode> curQueue = new LinkedList<>();
        Queue<TreeNode> nextQueue;
        curQueue.offer(root);
        while (!curQueue.isEmpty()) {
            preQueue = new LinkedList<>(curQueue);
            nextQueue = new LinkedList<>();
            while (!curQueue.isEmpty()) {
                TreeNode cur = curQueue.poll();
                if (cur.left != null) {
                    nextQueue.offer(cur.left);
                }
                if (cur.right != null) {
                    nextQueue.offer(cur.right);
                }
            }
            if (nextQueue.isEmpty()) {
                break;
            }
            curQueue = nextQueue;
        }

        // 建立树反向索引表
        HashMap<TreeNode, TreeNode> parentMap = new HashMap<>();
        dfs(root, parentMap);

        // 从最深层每个节点向上找parent,路过时,节点经过次数count++,找到最早出现count==n的祖先
        HashMap<Integer, Integer> countMap = new HashMap<>();
        int n = preQueue.size();
        while (!preQueue.isEmpty()) {
            TreeNode cur = preQueue.poll();
            while (cur != null) {
                int count = countMap.getOrDefault(cur.val, 0) + 1;
                if (count == n) {
                    return cur;
                }
                countMap.put(cur.val, count);
                cur = parentMap.get(cur);
            }
        }
        return null;
    }

    public void dfs(TreeNode node, HashMap<TreeNode, TreeNode> map) {
        if (node.left != null) {
            map.put(node.left, node);
            dfs(node.left, map);
        }
        if (node.right != null) {
            map.put(node.right, node);
            dfs(node.right, map);
        }
    }
}

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

leetcode 865. Smallest Subtree with all the Deepest Nodes | 865.具有所有最深节点的最小子树(树的BFS,parent反向索引map) 的相关文章

  • ubuntu安装pip3

    1 安装命令 sudo apt get install python3 pip 2 查看pip3的版本以及对应的python版本 pip3 V pip 21 1 1 from usr local lib python3 7 dist pac
  • latex打双引号“ “

    latex中如果用英文输入模式的双引号键入 xff0c 则输出的结果与我们预期的不符合 xff0c 这并不是LaTeX的正确输入方式 34 test 34 输出为 xff1a 正确的输入方式为 xff1a 引号左边输入两个反引号 96 xf
  • 过拟合的原因以及解决办法(深度学习)

    过拟合 xff1a 模型在训练集上表现的非常好 xff0c 但在测试集的数据下表现很差 具体观察loss函数就是 xff0c train loss一直降低 xff0c 而test loss先降低 xff0c 而后随着epoach的增加 xf
  • Linux与MAC共享以及TimeMachine服务器的搭建

    自从添置了MBPR之后 xff0c 就发现使用Samba协议的话 xff0c Linux与MacOS之间传输速度相当不稳定 xff0c 我还一度以为是MBP的无线网卡问题 随后便尝试了一下AFP协议 xff0c 果然效果立现 xff0c 因
  • Python字符串转数字

    默认转换方式 xff1a num 61 int string 把二进制 xff0c 八进制 xff0c 十六进制转化为数字 xff0c python也提供了内置函数 xff0c 非常方便 xff0c 用法分别如下 xff1a num1 61
  • Linux根据进程名字彻底删除所有相关的子进程

    Linux有些时候kill 9进程pid xff0c 进程名字还会出现 xff0c 比如spark提交应用时的SparkSubmit 这是因为当前进程有其它子进程依赖 此时可以根据进程名字彻底删除 xff0c 这里我提供了一份模板 xff1
  • Python中Json文件的写入与读取

    字典写入Json文件 xff0c 代码如下 xff1a import json sparkConfDict 61 39 defaultMaxSplitBytes 39 defaultMaxSplitBytes 39 openCostInBy
  • Python获取当前工作目录以及改变工作目录

    import os print os getcwd 获取并打印当前工作目录 os chdir 34 目标目录 34 修改当前工作目录为目标目录
  • Linux 手动杀VNC进程

    步骤 方法一 1 查VNC进程 span class token function ps span ef span class token operator span span class token function grep span
  • 记录我重新安装ORBSLAM2和PX4的过程

    1 背景 xff1a 今天卸载了Ubuntu16 04 xff0c 重新装了一个Ubuntu18 04 xff0c 成功做完系统之后需要把之前的备份恢复 我的备份比较粗暴 xff0c 就是直接把 home里的文件都先复制到Windows下
  • 【网络干货】最全BGP路由协议技术详解

    一 BGP 的基本概念 自治系统AS xff08 Autonomous System xff09 AS 是指在一个实体管辖下的拥有相同选路策略的 IP 网络 BGP 网络中的每个 AS 都被分配一个唯一的 AS 号 xff0c 用于区分不同
  • Python正则表达式之 - ?: / ?= / ?!

    用圆括号将所有选择项括起来 xff0c 相邻的选择项之间用 分隔 但用圆括号会有一个副作用 xff0c 使相关的匹配会被缓存 xff0c 此时可用 放在第一个选项前来消除这种副作用 其中 是非捕获元之一 xff0c 还有两个非捕获元是 61
  • Python教程:无参装饰器

    一 xff1a 储备知识 1 args xff0c kwargs span class token keyword def span span class token function index span span class token
  • 面向对象:类关系(泛化/实现/依赖/关联/聚合/组合)

    泛化 泛化 xff0c 也称作继承关系 指面向对象中派生类与基类之间的关系 xff0c 一个类 xff08 称为子类 子接口 xff09 继承另外的一个类 xff08 称为父类 父接口 xff09 的功能 指ClassA为ClassB Cl
  • webpack基本概念及使用

    webpack是什么 xff0c 用来干什么 xff1f webpack 是一个用于现代 JavaScript 应用程序的静态模块打包工具 xff1b webpack的下载安装 官网文档地址 xff1a https webpack js o
  • stlink制作(OSHW版)

    stlink制作安排 视频在我的B站 工程主页在开源硬件平台 0 项目原由 因为我那个板载stlink的NANO板近期要还给老师了 所以我就没有板子和stlink了 xff0c 但是对于一个stmer来说 xff0c 怎么能没stlink呢
  • JS对象销毁

    JS中对象销毁需要注意的几个方面 1 销毁你创建的其他对象 xff0c 并切断应用 2 解绑绑定事件 3 this上的成员变量 xff0c 需要切断引用的要切断 4 有继承时 xff0c 需要调用父类的销毁方法 5 清除dom结构
  • px4初级视频

    链接 xff1a https pan baidu com s 1VIQcOQt I5 evMx1jnV0ZQ 提取码 xff1a 8niq
  • 找工作、备考、面试刷题网站推荐(牛客网、力扣、计蒜客、hihocoder、七月在线)以及acm竞赛oj

    不管是找工作笔试面试白板试进大厂 xff0c 还是研究生参加初试复试 xff0c 数据结构和算法都是都是重中之重 xff0c 刷题就很必要 xff0c 来拿走自己的offer 吧 xff01 一 offer刷题推荐 1 牛客网 链接 xff
  • 安装Homebrew报错 curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused

    网上有很多方式 xff0c 这里只说自己解决的方式 xff0c 只针对mac 1 打开网站 https www ipaddress com 查询 raw githubusercontent com 对应的ip地址 2 将查询出来的地址映射加

随机推荐