leetcode863. 二叉树中所有距离为 K 的结点(java)

news2024/11/14 11:23:07

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

  • leetcode863. 二叉树中所有距离为 K 的结点
    • 题目描述
  • DFS 深度优先遍历
    • 代码演示
  • 二叉树专题

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/all-nodes-distance-k-in-binary-tree

题目描述

给定一个二叉树(具有根结点 root), 一个目标结点 target ,和一个整数值 k 。
返回到目标结点 target 距离为 k 的所有结点的值的列表。 答案可以以 任何顺序 返回。

示例1:
在这里插入图片描述
输入:root = [3,5,1,6,2,0,8,null,null,7,4], target = 5, k = 2
输出:[7,4,1]
解释:所求结点为与目标结点(值为 5)距离为 2 的结点,值分别为 7,4,以及 1

示例 2:
输入: root = [1], target = 1, k = 3
输出: []

提示:
节点数在 [1, 500] 范围内
0 <= Node.val <= 500
Node.val 中所有值 不同
目标结点 target 是树上的结点。
0 <= k <= 1000

DFS 深度优先遍历

二叉树或者多叉树中关于距离深度的问题,用深度优先遍历是比较好的选择,
但这个问题中,
简单的深度优先遍历,无法找到向上的节点,因此我们需要把节点的父节点信息都保存在一个结构中,方便去遍历.因为节点值都是唯一的,我们可以用 Map<Integer, TreeNode> parents 去保存.
然后深度遍历时 也去遍历父节点

代码演示

/**
 * 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> parents = new HashMap<Integer, TreeNode>();
    List<Integer> ans = new ArrayList<Integer>();

    public List<Integer> distanceK(TreeNode root, TreeNode target, int k) {
        // 从 root 出发 DFS,记录每个结点的父结点
        findParents(root);

        // 从 target 出发 DFS,寻找所有深度为 k 的结点
        findDistanceK(target, null, 0, k);

        return ans;
    }
	/**
	* 把节点和节点对应的父节点保存在一个表中 方便查询
	*/
    public void findParents(TreeNode root){
        if(root.left != null){
            parents.put(root.left.val,root);
            findParents(root.left);
        }
        if(root.right != null){
            parents.put(root.right.val,root);
            findParents(root.right);
        }
    }
	/**
	* DFS深度优先遍历
	* form 用来标记出发节点 减少重复计算
	*/
    public void findDistanceK(TreeNode target,TreeNode from,int depth,int k){
    //base case 
        if(target == null ){
            return ;
        }
        // 距离相等时 加入到答案里
        if(depth == k){
            ans.add(target.val);
            return;
        }
        //遍历左树
        if(target.left != from){
            findDistanceK(target.left,target,depth + 1,k);
        }
        //遍历右树
        if(target.right != from){
            findDistanceK(target.right,target,depth + 1,k);
        }
        //遍历父节点
        if(parents.get(target.val) != from){
            findDistanceK(parents.get(target.val),target,depth + 1,k);
        }
    }

}

二叉树专题

leetcode257. 二叉树的所有路径

leetcode814. 二叉树剪枝

leetcode111. 二叉树的最小深度

leetcode199. 二叉树的右视图

leetcode222. 完全二叉树的节点个数

leetcode2385. 感染二叉树需要的总时间

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/677631.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

英之剑法——第一境(通达人与物之境)

&#x1f31f;博主&#xff1a;命运之光 ☀️专栏&#xff1a;英之剑法&#x1f5e1; ❤️‍&#x1f525;专栏&#xff1a;英之试炼&#x1f525; ☀️博主的其他文章&#xff1a;点击进入博主的主页 &#x1f433; 开篇想说的话&#xff1a;开学就大三了&#xff0c;命运之光…

永磁同步电机在线参数辨识综述

优点 实时性&#xff1a;在线参数辨识能够在电机实际运行时进行参数估计&#xff0c;可以实时地获取电机的参数信息。这使得在线参数辨识更适用于需要实时调节和优化电机控制策略的应用场景。 动态适应性&#xff1a;在线参数辨识可以根据电机的实时工作状态和环境变化来动态地…

最“赚钱”编程语言出炉,惊到我了.....

Stack Overflow 发布了 2023 年开发者调查报告&#xff0c;据称共计超过 9 万名开发者参与了此次调查。 完整报告包含了受访开发者画像&#xff0c;以及关于开发技术、AI、职业、社区等方面的内容。本文主要介绍关于开发技术和 AI 的部分。 懒人目录&#xff1a; 最流行编程语…

[皮尔逊相关系数corrwith]使用案例:电影推荐系统

协同过滤算法用于发现用户与物品之间的相关性&#xff0c;主要有两种&#xff1a;基于用户的和基于物品的。 基于用户&#xff1a; 用户1购买了物品A、B、C、D&#xff0c;并给了好评&#xff1b;而用户2也买了A、B、C&#xff0c;那么认为用户1和用户2是同类型用户&#xff…

hello算法笔记之堆

堆&#xff1a; 一种满足特定条件的完全二叉树&#xff0c;可分为两种类型&#xff1a; 「大顶堆 Max Heap」&#xff0c;任意节点的值 ≥其子节点的值&#xff1b;「小顶堆 Min Heap」&#xff0c;任意节点的值 ≤ 其子节点的值&#xff1b; 将二叉树的根节点称为「堆顶」&a…

p5模型详解

1.研究动机 推荐系统种类繁多&#xff0c;user、item特征集合可以共享&#xff0c;特定架构特定任务使得各任务间无法迁移。 语言可以描述万物&#xff0c;可以作为推荐系统的中间桥梁&#xff0c;受到prompt学习的影响&#xff0c;本文提出了text-to-text框架&#xff0c;称…

【openGauss数据库配置运行参数】--略有小成

【openGauss数据库配置运行参数】--略有小成 &#x1f53b; 一、查看参数值&#x1f530; 1.1 使用SHOW命令查看&#x1f530; 1.2 使用pg_settings视图查看 &#x1f53b; 二、openGauss的六类GUC参数&#x1f53b; 三、重设运行参数&#x1f530; 1.3 重设参数的几种方式&…

5.0、Java_IO流 - IO流类的基本体系结构

5.0、Java_IO流 - IO流类的基本体系结构 Java 为我们提供了多种多样的 IO 流&#xff0c;我们可以根据不同的功能以及性能要求挑选合适的 IO 流&#xff1b; 下图为 Java 中 IO 流类的基本体系结构&#xff08;这里只列举出一些常用的类&#xff0c;详情可以参考 JDK API 文档&…

闭门造轮(LVGL_1)

参考的课程&#xff1a; 全志韦东山的课程&#xff1a;https://www.100ask.net/p/t_pc/course_pc_detail/column/p_61c5a317e4b0cca4a4e8b6f1?product_idp_61c5a317e4b0cca4a4e8b6f1 例程1_// 基础对象(lv_obj)&#xff0c;"Hello, LVGL!" void lvgl_demo(void) …

用平衡因子实现-AVL树

目录 AVL树的概念AVL树节点的定义AVL树的插入AVL树的旋转左单旋(parent->_bf 2 && cur->_bf 1)a,b,c当高度为0a,b,c当高度为1a,b,c当高度为2a,b,c当高度为...... 右单旋(parent->_bf -2 && cur->_bf -1)a,b,c当高度为0a,b,c当高度为1a,b,c当高…

UE5《Electric Dreams》项目PCG技术解析 之 基于关卡PCGSettings的工作流

程序化内容生成框架(Procedural Content Generation Framework,下文简称PCG)可谓是UE5.2版本中最令人瞩目的新技术之一&#xff0c;老王也是在第一时间就关注了这个技术&#xff0c;以前尝试过用Houdini来实现UE5中的程序化内容生成&#xff0c;感觉还是很蹩脚的&#xff0c;毕…

无线发射功率

无线电发射功率 无线电发射机输出的射频信号&#xff0c;通过馈线&#xff08;电缆&#xff09;输送到天线&#xff0c;由天线以电磁波形式辐射出去。电磁波到达接收地点后&#xff0c;由天线接收下来&#xff08;仅仅接收很小很小一部分功率&#xff09;&#xff0c;并通过馈…

Linux系统编程(再论execve)

文章目录 前言一、execve的第三个参数二、进程空间三、命令行参数规范四、optstring规则的扩展定义总结 前言 本篇文章我们继续来研究一下execve这个系统调用&#xff0c;上篇文章已经讲解了前两个参数的意义了&#xff0c;那么这篇文章就来讲解一下第三个参数的具体含义。 一…

三分钟学习一个python小知识4-----------我的对python中numpy的理解, 我列举了关于numpy常用的10个例子来深入理解numpy

这里写目录标题 1、NumPy是什么2、NumPy的常见应用---必须掌握2.1.创建一个数组2.2.数组的属性2.3.取数组中的元素2.4.数组的运算2.5.数组的转置2.6. 数组的索引和切片2.7. 数组的重塑2.8. 数组的广播2.9. 数组的聚合操作2.10. 数组的排序 总结 1、NumPy是什么 NumPy是专门用于…

vue+elementui实现app布局小米商城,样式美观大方,功能完整

目录 一、项目效果在线预览 二、效果图 1.首页效果图 2.分类&#xff0c;动态分类商品数据根据所属分类动态切换 3.购物车&#xff0c;动态添加购物车&#xff08;增、删、改、查&#xff09; 4.我的 5.登录注册 6.商品详情 7.搜索&#xff08;动态模糊搜索、搜索历史…

12---整数转罗马数字

罗马数字包含以下七种字符&#xff1a; I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例…

文件上传漏洞-用骗子的角度分析

&#xff08;一&#xff09;文件上传漏洞 文件上传漏洞&#xff0c;发送在用户上传文件功能中&#xff0c;很多网址都对上传的文件格式进行限制&#xff0c;但是被攻击机者找到漏洞&#xff0c;把木马、病毒进行上传&#xff0c;然后控制服务器。对上传的文件格式不是不限制&a…

MySQL实战解析底层---为什么这些SQL语句逻辑相同,性能却差异巨大

目录 前言 案例一&#xff1a;条件字段函数操作 案例二&#xff1a;隐式类型转换 案例三&#xff1a;隐式字符编码转换 前言 在MySQL中&#xff0c;有很多看上去逻辑相同&#xff0c;但性能却差异巨大的SQL语句对这些语句使用不当的话&#xff0c;就会不经意间导致整个数据…

动态规划V (85、91、97)-最近都开始摆烂

CP85 最大矩形 题目描述&#xff1a; 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵&#xff0c;找出只包含 1 的最大矩形&#xff0c;并返回其面积。 学习记录&#xff1a; 对每一个地方都去统计最大举行的话&#xff0c;会有很多多余的计算&#xff0c;题…

windows操作系统线程结构体

上一篇我们介绍了进程结构体&#xff0c;这节我们介绍下线程结构体&#xff1a;ETHREAD。还是去windbg里面去看一下这个结构体的长相: 依旧是一大堆成员&#xff0c;我们只关注一些比较重要的结构体成员。在进程结构体中的第一个成员是一个子结构体Pcb,在线程结构体中&#xff…