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

题目

在这里插入图片描述
题目链接:
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;
}

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

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

相关文章

vue3+vite解决项目打包后本地图片等资源找不到的问题

1.在vite.config.js里面做如下配置 import { defineConfig } from vite import vue from vitejs/plugin-vueexport default defineConfig({base: ./, // 打包的静态资源引用路径plugins: [vue()], // 放插件用的resolve: {alias: {: /src // 配置/提示符}}, })上述配置主要就是…

C++迈向精通:vector复现与sort复现

vector复现 思考过程 对于vector考虑如下几点&#xff1a; 底层数据结构算法实现方式对外表现形式 这里底层的数据结构采用了顺序表&#xff0c;当然&#xff0c;原版STL中的vector也是采用的顺序表。 算法实现的方式放在代码中去设计 对外表现形式是数组&#xff0c;因此需…

[IMX6ULL驱动开发]-Linux对中断的处理(二)

上一篇文章中&#xff0c;引入了Linux对于中断的一些简略流程以及中断抽象为具体实际形象。此文章主要是继续加深对Linux对中断的处理流程以及一些相应的数据结构。 目录 Linux对中断的扩展&#xff1a;硬件中断、软件中断 多中断处理 中断上下部处理流程 发生中断A&#…

Nginx R31 doc-15-Live Activity Monitoring 实时活动监控

前言 大家好&#xff0c;我是老马。很高兴遇到你。 我们为 java 开发者实现了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何处理的&#xff0c;可以参考我的另一个项目&#xff1a; 手写从零实现简易版 tomcat minicat 手写 nginx 系列 …

SpringBoot整合SpringSecurit,实现ajax的登录、退出、权限校验

1、本文章中SpringBoot整合SpringSecurity&#xff0c;只是基于session方式&#xff0c;并且没有使用到redis。 2、登录、登出都是通过ajax的方式进行。 项目目录&#xff1a; 1、pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xm…

FastReport 主子表关系

代码中只需要绑定主表的数据就可以&#xff0c;子表的数据会通过报表中的关连关系自动到数据库中带出。 using CloudSaaS.DB.Handler; using CloudSaaS.Model; using CloudSaaS.DAL; using FastReport; using FastReport.Web; using System; using System.Collections.Generic;…

(2020|ICML PMLR,线性 Transformer,核函数,RNN)Transformer 是 RNN

Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention 公众号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 3. 线性 Transformers 3.1. Transformer 3.2.…

2023、2024国赛web复现wp

2023 Unzip 类型&#xff1a;任意文件上传漏洞 主要知识点&#xff1a;软链接 随便上传一个一句话木马文件&#xff0c;得到一串php代码 根据代码上传zip文件发现进入后还是此页面 代码审计&#xff1a; <?php error_reporting(0); highlight_file(__FILE__);$finfo fin…

Stable Diffusion【写实模型】:逼真,逼真,超级逼真的国产超写实摄影大模型万享XL

今天和大家分享的是一个国产万享系列中使用量最高的大模型:万享XL_超写实摄影&#xff0c;顾名思义&#xff0c;该大模型主要是面向写实摄影&#xff0c;一方面生成的图片人物皮肤纹理细节超级逼真&#xff0c;另一方面对于光影效果的处理也非常到位。对于万享XL超写实摄影大模…

jQuery 下载与快速入门指南

引言 jQuery 是一个广泛使用的 JavaScript 库&#xff0c;它极大地简化了客户端的 HTML 文档遍历、事件处理、动画以及Ajax交互&#xff0c;让Web开发者能够更加高效地实现动态网页效果。本文将指导你如何下载jQuery&#xff0c;并提供一个简单的入门示例来展示其基本用法。 …

揭秘Tensor Core黑科技:如何让AI计算速度飞跃

揭秘 Tensor Core 底层&#xff1a;如何让AI计算速度飞跃 Tensor Core&#xff0c;加速深度学习计算的利器&#xff0c;专用于高效执行深度神经网络中的矩阵乘法和卷积运算&#xff0c;提升计算效率。 Tensor Core凭借混合精度计算与张量核心操作&#xff0c;大幅加速深度学习…

参数高效微调PEFT(二)快速入门P-Tuning、P-Tuning V2

参数高效微调PEFT(二)快速入门P-Tuning、P-Tuning V2 参数高效微调PEFT(一)快速入门BitFit、Prompt Tuning、Prefix Tuning 今天&#xff0c;我们继续了解下来自清华大学发布的两种参数高效微调方法P-Tuning和P-Tuning v2。可以简单的将P-Tuning是认为针对Prompt Tuning的改进…

(二)MySQL 存储引擎

欢迎访问 1. MySQL ⽀持哪些存储引擎&#xff1f;默认使⽤哪个&#xff1f; MyISAM 和 InnoDB&#xff0c;默认InnoDB 2.MyISAM 和 InnoDB 有什么区别&#xff1f; 事务支持&#xff1a; InnoDB 支持事务&#xff0c;具有 ACID&#xff08;原子性、一致性、隔离性、持久性&a…

零基础小白本地部署大疆上云api(个人记录供参考)

文章目录 运行前准备前后端项目运行1.前端项目&#xff1a; 后端项目运行必须先依靠emqx运行必须先依靠redis运行修改后端项目的application.yml文件 运行前准备 1.保证电脑又node.js环境&#xff0c;可以正常使用npm 2.Java的jdk必须是11及以上版本否则无效 3.下载好emqx,red…

《java数据结构》--队列详解

一.认识队列&#x1f431; 初识队列&#x1f638; 队列和栈类似都对数据的存取有着严格的要求&#xff0c;不同的是栈遵循先进后出的原则&#xff0c;而队列遵循先进先出的原则&#xff0c;栈是只有一端可以存取&#xff0c;队列是一端存&#xff0c;一端取。这里我来画一个图…

CSS中的writing-mode属性:解锁文本布局新维度

在网页设计的广阔天地里&#xff0c;CSS&#xff08;层叠样式表&#xff09;扮演着至关重要的角色&#xff0c;它赋予了我们塑造网页外观和布局的强大能力。其中&#xff0c;writing-mode属性是一个常被忽视但功能强大的工具&#xff0c;用于控制文本的书写方向和排列方式。今天…

鸿蒙ArkUI-X跨语言调用说明:【平台桥接开发指南(Android)BridgePlugin】

BridgePlugin (平台桥接) 本模块提供ArkUI端和Android平台端消息通信的功能&#xff0c;包括数据传输、方法调用和事件调用。需配套ArkUI端API使用&#xff0c;ArkUI侧具体用法请参考[Bridge API]。 说明&#xff1a; 开发前请熟悉鸿蒙开发指导文档&#xff1a; gitee.com/li-…

“2024 亚马逊云科技中国峰会,挑战俱乐部 Hands On 动手实验课程正在直播中,点击链接畅享生成式AI建构之旅,赢心动好礼

只看不过瘾&#xff1f;别急&#xff01;我们为您准备了【生成式AI助手 Amazon Q 初体验】动手实验&#xff0c;一款生成式人工智能 (AI) 支持的对话助理&#xff0c;可以帮助您理解、构建、扩展和操作 Amazon 应用程序&#xff0c;您可以询问有关 Amazon 架构、最佳实践、文档…

马斯克开启军备竞赛,xAI筹集60亿美元

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调重新阅读。而最新科技&#xff08;Mamba&#xff0c;xLSTM,KAN&#xff09;则提供了大模…

【MySQL精通之路】SQL优化(1)-查询优化(12)-块嵌套循环和批处理Key访问联接

在MySQL中&#xff0c;可以使用批处理Key访问&#xff08;BKA&#xff09;联接算法&#xff0c;该算法使用对联接表的索引访问和联接缓冲区。 BKA算法支持内联接、外联接和半联接操作&#xff0c;包括嵌套的外部联接。 BKA的优点包括由于更高效的表扫描而提高了联接性能。 此…