牛客ONT45 距离是K的二叉树节点【中等 宽度优先遍历 Java/Go/PHP/C++】

题目

在这里插入图片描述
题目链接:
https://www.nowcoder.com/practice/e280b9b5aabd42c9b36831e522485622

思路

 图,队列
构件图,直接从target出发,扩展到第k层就是答案

Java代码

import java.util.*;/** public class TreeNode {*   int val = 0;*   TreeNode left = null;*   TreeNode right = null;*   public TreeNode(int val) {*     this.val = val;*   }* }*/public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param root TreeNode类* @param target int整型* @param k int整型* @return int整型一维数组*/public ArrayList  distanceKnodes (TreeNode root, int target, int k) {//构建图TreeNode cur = root;Map<Integer, List<Integer>> graph = new HashMap<>();//BFS,二叉树的层序遍历Queue<TreeNode> q = new LinkedList<>();q.add(cur);graph.put(cur.val, new ArrayList<>());while (!q.isEmpty()) {TreeNode pop = q.poll();if (pop.left != null) {q.add(pop.left);graph.get(pop.val).add(pop.left.val);graph.put(pop.left.val, new ArrayList<>());graph.get(pop.left.val).add(pop.val);}if (pop.right != null) {q.add(pop.right);graph.get(pop.val).add(pop.right.val);graph.put(pop.right.val, new ArrayList<>());graph.get(pop.right.val).add(pop.val);}}//图的BFSQueue<Integer> queue = new LinkedList<>();queue.add(target);Set<Integer> visited = new HashSet<>();visited.add(target);while (k >= 0) {k--;int size = queue.size();for (int i = 0; i < size ; i++) {int pop = queue.poll();for (Integer next : graph.get(pop)) {if (visited.contains(next)) continue;queue.add(next);visited.add(next);}}if ( k == 0) break;}ArrayList<Integer> ans = new ArrayList <>();int size = queue.size();for (int i = 0; i < size ; i++) {ans.add( queue.poll());}return ans;}
}

Go代码

package mainimport . "nc_tools"/** type TreeNode struct {*   Val int*   Left *TreeNode*   Right *TreeNode* }*//*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param root TreeNode类* @param target int整型* @param k int整型* @return int整型一维数组*/
func distanceKnodes(root *TreeNode, target int, k int) []int {//BFSgraph := map[int][]int{} //构件图//层序遍历二叉树q1 := []*TreeNode{}q1 = append(q1, root)graph[root.Val] = []int{}for len(q1) > 0 {size := len(q1)q1bak := []*TreeNode{}for i := 0; i < size; i++ {pop := q1[i]a := pop.Valif pop.Left != nil {q1bak = append(q1bak, pop.Left)b := pop.Left.Valgraph[a] = append(graph[a], b)graph[b] = []int{a}}if pop.Right != nil {q1bak = append(q1bak, pop.Right)c := pop.Right.Valgraph[a] = append(graph[a], c)graph[c] = []int{a}}}q1 = q1bak}//图的BFSq := []int{target}visited := map[int]bool{}visited[target] = truefor k >= 0 {k--size := len(q)qbak := []int{}for i := 0; i < size; i++ {pop := q[i]nexts := graph[pop]for _, next := range nexts {_, ok := visited[next]if ok {continue}qbak = append(qbak, next)visited[next] = true}}q = qbakif k == 0 {break}}return q
}

PHP代码

<?php/*class TreeNode{var $val;var $left = NULL;var $right = NULL;function __construct($val){$this->val = $val;}
}*//*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param root TreeNode类 * @param target int整型 * @param k int整型 * @return int整型一维数组*/
function distanceKnodes( $root ,  $target ,  $k )
{//BFS$graph = array(); //构建图//二叉树的层序遍历$q1 = [$root];$graph[$root->val] = array();while (count($q1) >0){$q1bak=array();$size = count($q1);for($i=0;$i<$size;$i++){$pop = $q1[$i];$a = $pop->val;if($pop->left!=null){$q1bak[count($q1bak)] = $pop->left;$b = $pop->left->val;$graph[$a][count($graph[$a])] = $b;$graph[$b]=[$a];}if($pop->right!=null){$q1bak[count($q1bak)] = $pop->right;$c = $pop->right->val;$graph[$a][count($graph[$a])] = $c;$graph[$c]=[$a];}}$q1=$q1bak;}//图的BFS$q = [$target];$visited = [$target=>$target];while ($k>=0){$k--;$size = count($q);$qbak = array();for($i=0;$i<$size;$i++){$nexts = $graph[$q[$i]];foreach ($nexts as $next){if(isset($visited[$next])) continue;$qbak[count($qbak)]  =$next;$visited[$next] = $next;}}$q = $qbak;if($k ==0) break;}return $q;
}

C++ 代码

/*** struct TreeNode {*  int val;*  struct TreeNode *left;*  struct TreeNode *right;*  TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* };*/
class Solution {public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param root TreeNode类* @param target int整型* @param k int整型* @return int整型vector*/vector<int> distanceKnodes(TreeNode* root, int target, int k) {//BFS//二叉树层序遍历vector<TreeNode> q1;std::map<int, vector<int>> graph;q1.push_back(*root);graph[root->val] = vector<int>();while (q1.size() > 0) {vector<TreeNode> q1bak;int size = q1.size();for (int i = 0; i < size; i++) {TreeNode pop = q1[i];int a = pop.val;if (pop.left != nullptr) {q1bak.push_back(*pop.left);int b = pop.left->val;graph[a].push_back(b);graph[b] = vector<int>();graph[b].push_back(a);}if (pop.right != nullptr) {q1bak.push_back(*pop.right);int c = pop.right->val;graph[a].push_back(c);graph[c] = vector<int>();graph[c].push_back(a);}}q1 = q1bak;}//图的BFSvector<int> q = {target};std::map<int, bool> visited;visited[target] = true;while (k >= 0) {k--;int size = q.size();vector<int> qbak;for (int i = 0; i < size; i++) {vector<int> nexts = graph[q[i]];for (int j = 0; j < nexts.size(); j++) {int next = nexts[j];if (visited.count(next) == 0) {visited[next] = true;qbak.push_back(next);}}}q = qbak;if (k == 0) break;}return q;}
};

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

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

相关文章

架构设计之安全性属性深度剖析:从理论到实践的完美融合

文章目录 引言一、安全性属性的理论探讨1.1 定义说明1.2 安全原则1.3 安全模型1.4 安全机制 二、安全性属性的实践应用2.1 安全风险评估2.2 架构设计中的安全考虑2.3 技术手段和工具2.4 团队协作与沟通2.5 安全政策和流程2.6 合规性和标准2.7 持续监控和改进 三、理论与实践的融…

Python函数进阶

文章目录 1 函数多返回值2 函数多种传参方式2.1 位置参数2.2 关键字参数2.3 缺省参数2.4 不定长参数 3 匿名函数函数作为参数传递lambda匿名函数 1 函数多返回值 def test_return():return 1,2,3 x,y,z test_return() print(x) print(y) print(z)2 函数多种传参方式 2.1 位置参…

0基础认识C语言(理论+实操3)

所有籍籍无名的日子里 我从未看轻自己半分 小伙伴们&#xff0c;一起开始我们今天的话题吧 一、算法操作符 1.双目操作符 为何叫双目操作符呢&#xff1f;其实是因为我们进行加减乘除的时候&#xff0c;至少得需要两个数字进行这些运算&#xff0c;而这个数字就被称为操作数…

基于单片机的微型嵌入式温度测量仪的设计与实现分析

摘要 &#xff1a; 作为信息技术中重要的技术手段之一嵌入式单片机系统已经被应用到越来越多不同的行业领域中。如&#xff0c;各种手持监测设备、智能家电设备等。当前展开对单片机的微型嵌入式温度测量仪的设计和实现研究&#xff0c;从微型嵌入式单片机相关理论入手&#xf…

【实战教程】构建可复用的 Spring Boot starter 微服务组件

案例 Demo&#xff1a;https://gitee.com/regexpei/coding-trainee/tree/demo/20240526_starter 介绍 在 Spring Boot 中&#xff0c;starter 启动依赖就像一个“开箱即用”的工具箱&#xff0c;它包含了第三方组件的配置和依赖&#xff0c;让我们无需手动配置和添加这些组件。…

【多目标跟踪】《FlowMOT: 3D Multi-Object Tracking by Scene Flow Association》论文阅读笔记

0.论文 论文地址链接:https://arxiv.org/pdf/2012.07541v1 通过流的方式跟踪是一个比较新颖的点,所以这里比较关注运动跟踪,是如果做到流的跟踪来预测目标的位置以及ID绑定的。 FlowMOT的框架结构如下所示,本中会主要关注下运动跟踪、数据关联、ID分配、新生/消亡…

python替换占位符为变量,实现读取配置文件

文章目录 背景1、定义正则表达式2、替换变量占位符3、实现功能 背景 使用python编写小工具&#xff0c;有一个配置文件&#xff0c;希望实现类似shell命令的&#xff0c;定义变量并且使用${}或者$来引用。如果有好的建议欢迎讨论。 配置文件示例内容如下: D:\project\test\pr…

Arrays(操作数组工具类)、Lambda表达式

package exercise;import java.util.Arrays;public class ArraysDemo {public static void main(String[] args) {int[] arr {1, 2, 3, 4, 5};//将数组变成字符串System.out.println(Arrays.toString(arr));//二分查找法查找元素//细节1&#xff1a;1.数组必须是有序的 2.元素…

OpenCASCADE入门(2)——openCasCade7.6.0版本的exe方式安装,vs2017环境配置,编译和使用draw

3rd party Components | Open CASCADE Technology 目录 引出安装好vs2017和occt7.6设置环境变量 启动occt和编译关于custom.bat批处理文件双击运行 打开draw使用方式一&#xff1a;双击draw.bat批处理vs设置启动项 总结其他自定义信号和槽1.自定义信号2.自定义槽3.建立连接4.进…

路由器设置——隐藏SSID(隐藏WiFi名称)

参考来源&#xff1a; https://www.192ly.com/qiu-zhu/33315.htmlhttps://www.yunqishi.net/video/109743.html 一、什么是SSID? SSID是Service Set ldentifier的缩写&#xff0c;意思是服务集标识&#xff0c;简单来说SSID就是wifi的名字。 二、怎么隐藏SSID 将 开启SSI…

为什么要学习数据结构和算法

前言 控制专业转码学习记录&#xff0c;本科没学过这门课&#xff0c;但是要从事软件行业通过相关面试笔试基础还是要打牢固的&#xff0c;所以通过写博客记录一下。 必要性 1.越是厉害的公司&#xff0c;越是注重考察数据结构与算法这类基础知识 2.作为业务开发&#xff0c…

MMPose-RTMO推理详解及部署实现(上)

目录 前言1. 概述1.1 MMPopse1.2 MMDeploy1.3 RTMO 2. 环境配置3. Demo测试4. ONNX导出初探5. ONNX导出代码浅析6. 剔除NMS7. 输出合并8. LayerNormalization算子导出9. 动态batch的实现10. 导出修改总结11. 拓展-MMPose中导出ONNX结语下载链接参考 前言 最近在 MMPose 上看到了…

【NOIP2018普及组复赛】题2:龙虎斗

题2&#xff1a;龙虎斗 【题目描述】 轩轩和凯凯正在玩一款叫《龙虎斗》的游戏&#xff0c;游戏的棋盘是一条线段&#xff0c;线段上有 n n n 个兵营&#xff08;自左至右编号 1 ∼ n 1∼n 1∼n&#xff09;&#xff0c;相邻编号的兵营之间相隔 1 1 1 厘米&#xff0c;即棋…

【Python从入门到进阶】56、Mysql防止SQL注入及ORM库简化操作

接上篇《55、使用Python轻松操作Mysql数据库》 上一篇我们讲解了Mysql的基本链接和增删改查&#xff0c;本篇我们来介绍链接Mysql时参数化查询与防止SQL注入以及使用ORM&#xff08;对象关系映射&#xff09;库简化操作的内容。 一、参数化查询与防止SQL注入 在数据库操作中&…

雄鹰只属于天空

雄鹰只属于天空 成大事者&#xff0c;必有人生至暗时刻之经历&#xff0c;高处坠落折戟沉沙&#xff0c;在孤立无援时&#xff0c;世态炎凉人情冷落&#xff0c;饱经苦楚滋味&#xff0c;所有的热情关系一夜冰封&#xff0c;冷嘲热讽袖手旁观&#xff0c;落井下石四面楚歌&…

互联网简史-分久必合,合久必分

六一儿童节&#xff0c;给孩子们讲讲互联网的历史。 任何当代技术都是古老技术的重组&#xff0c;这是真的。我从电话网络开始&#xff0c;两幅图完事。电波可以承载语音作为最开始&#xff0c;后面的事自然而然&#xff1a; 说实话&#xff0c;网络这种事&#xff0c;它的 …

FPGA中的乒乓操作

为什么不直接选用一个缓存更大的FIFO而选用乒乓操作为什么乒乓操作可以实现低速处理高速数据乒乓操作适用哪些场景 一、乒乓操作结构 首先先介绍一下乒乓操作的原理&#xff0c;其结构如下&#xff1a; 输入选择单元负责将数据送到数据缓冲模块&#xff0c;然后输出选择单元负…

面试题vue+uniapp(个人理解-面试口头答述)未编辑完整....

1.vue2和vue3的区别&#xff08;vue3与vue2的区别&#xff08;你不知道细节全在这&#xff09;_vue2和vue3区别-CSDN博客&#xff09;参考 Vue3 在组合式&#xff08;Composition &#xff09;API&#xff0c;中使用生命周期钩子时需要先引入&#xff0c;而 Vue2 在选项API&am…

使用迭代最近点 (ICP) 算法在 Open3D 中对齐点云

一、Open3D 简介及其功能 Open3D 是一个现代库&#xff0c;它提供了用于处理 3D 数据的各种工具。在其功能中&#xff0c;它提供了高效的数据结构和算法来处理点云、网格等&#xff0c;使其成为在计算机视觉、机器人和图形领域工作的研究人员和从业人员的不错选择。Open3D 的特…

2024 年最新安装MAC-vue教学包括常见错误

花了一上午时间终于将 vue 的工程文件安装好了&#xff0c;本教材是傻瓜式操作&#xff0c;按着教程一步一步操作最后就可以看到页面了。 安装Node 1.在线地址&#xff1a; https://nodejs.org/en 2、点击 Download Node.js下载即可&#xff0c;下载完成后&#xff0c;傻瓜式的…