LeetCode 863. 二叉树中所有距离为 K 的结点(公共祖先/ DFS+BFS)

文章目录

    • 1. 题目
    • 2. 解题
      • 2.1 公共祖先
      • 2.2 建图+BFS

1. 题目

给定一个二叉树(具有根结点 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 的结点,
值分别为 74,以及 1

在这里插入图片描述

注意,输入的 "root" 和 "target" 实际上是树上的结点。
上面的输入仅仅是对这些对象进行了序列化描述。提示:
给定的树是非空的,且最多有 K 个结点。
树上的每个结点都具有唯一的值 0 <= node.val <= 500 。
目标结点 target 是树上的结点。
0 <= K <= 1000.

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/all-nodes-distance-k-in-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

2.1 公共祖先

参考了官网题解区

  • 按照二叉树的数组实现思想,把各个节点编号
  • 知道target的编号 pt 了,遍历所有节点编号 pi
  • pt != pi 时,较大的一边,往上移动一层,(p-1)/2,同时距离 +1,直到相等,找到最近公共祖先
  • 时间复杂度 O(nlogn)O(nlogn)O(nlogn)
class Solution {unordered_map<TreeNode*, int> pos;
public:vector<int> distanceK(TreeNode* root, TreeNode* target, int K) {vector<int> ans;dfs(root,0);int pt, pi, dis = 0;for(auto posi : pos){pt = pos[target];pi = posi.second;dis = 0;while(pt != pi){if(pt < pi)pi = (pi-1)/2;elsept = (pt-1)/2;dis++;}if(dis == K)ans.push_back(posi.first->val);}return ans;}void dfs(TreeNode* root, int p){if(!root) return;pos[root] = p;dfs(root->left, 2*p+1);dfs(root->right, 2*p+2);}
};

12 ms 15.2 MB

2.2 建图+BFS

  • dfs 建立每个节点与父节点的路径
  • bfs 查找第 k 层节点
  • 时间复杂度O(n)O(n)O(n)
class Solution {unordered_map<TreeNode*, TreeNode*> f;
public:vector<int> distanceK(TreeNode* root, TreeNode* target, int K) {dfs(root, NULL);vector<int> ans;unordered_set<TreeNode*> visited;queue<TreeNode*> q;q.push(target);visited.insert(target);int dis = 0, size;TreeNode* tp;while(!q.empty()){if(dis == K)break;size = q.size();while(size--){tp = q.front();q.pop();if(tp->left && !visited.count(tp->left)){q.push(tp->left);visited.insert(tp->left);}if(tp->right && !visited.count(tp->right)){q.push(tp->right);visited.insert(tp->right);}if(f[tp] && !visited.count(f[tp])){q.push(f[tp]);visited.insert(f[tp]);}}dis++;}while(!q.empty()){ans.push_back(q.front()->val);q.pop();}return ans;}void dfs(TreeNode* root, TreeNode* father){if(!root) return;f[root] = father;//建立父节点连接dfs(root->left, root);dfs(root->right, root);}
};

8 ms 15.8 MB

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

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

相关文章

ioctl操作

ioctl操作传统上ioctl函数是用于那些普遍使用&#xff0c;但不适合归入其他类别的任何特性的系统接 口。Posix去掉了ioctl&#xff0c;它通过创建特殊的其功能已被Posix标准化的包裹函数来代替ioctl。这一章介绍和网络 编程有关的ioctl操作。1. ioctl函数int ioctl(int d, int …

java用栈处理四则运算_Java 用栈处理四则运算

import java.util.Arrays;import java.util.HashMap;import java.util.Map;import java.util.Stack;import java.util.regex.Matcher;import java.util.regex.Pattern;/*** 目前只能做简单的四则运算&#xff0c;不支持浮点数和其他符号&#xff0c;不支持多线程* 计算步骤&…

LeetCode 846. 一手顺子(map)

1. 题目 爱丽丝有一手&#xff08;hand&#xff09;由整数数组给定的牌。 现在她想把牌重新排列成组&#xff0c;使得每个组的大小都是 W&#xff0c;且由 W 张连续的牌组成。 如果她可以完成分组就返回 true&#xff0c;否则返回 false。 示例 1&#xff1a; 输入&#xf…

25 To Life

《25 To Life 》 too late for the other side 现在回头为时已晚 caught in a change 由于一次变故 25 to life 25岁时,即决定了一生 too late for the other side 现在回头为时已晚 caught in a change 由于一次变故 25 to life 25岁时,即决定了一生 …

多线程 流水线 java_Java Lock锁多线程中实现流水线任务

下面程序代码通过使用Lock锁执行简单的流水线任务&#xff1a;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/*** author lzq* data 2020/4/29 0029 - 下午 9:48*/public class Test…

LeetCode 962. 最大宽度坡(单调栈)

1. 题目 给定一个整数数组 A&#xff0c;坡是元组 (i, j)&#xff0c;其中 i < j 且 A[i] < A[j]。这样的坡的宽度为 j - i。 找出 A 中的坡的最大宽度&#xff0c;如果不存在&#xff0c;返回 0 。 示例 1&#xff1a; 输入&#xff1a;[6,0,8,2,1,5] 输出&#xff1…

java 加载资源文件

ClassLoader提供了两个方法用于从装载的类路径中取得资源&#xff1a; public URL getResource(String name); public InputStream getResourceAsStream(String name);这里name是资源的类路径&#xff0c;它是相对与“/”根路径下的位置。getResource得到的是一个URL对象来定位…

Java用链表写图书管理_C语言链表实现图书管理系统

之前参照网上的资料用链表实现了图书管理系统&#xff0c;包括简单的增删改查功能以及借书还书功能&#xff0c;我是VC6.0下写的一个控制台程序&#xff0c;格式参照的网上的。在动手编码之前&#xff0c;你需要理清自己的思路。首先&#xff0c;需要确定图书馆里系统中主要有那…

【Kaggle】Intermediate Machine Learning(缺失值+文字特征处理)

文章目录1. Introduction2. Missing Values 缺失值处理3. Categorical Variables 文字变量处理from https://www.kaggle.com/learn/intermediate-machine-learning下一篇 &#xff1a;【Kaggle】Intermediate Machine Learning&#xff08;管道交叉验证&#xff09; 1. Intro…

VB6调用API打开目标文件所在文件夹且选中目标文件

Option Explicit 模块名称: mOpenFolderAndSetFileFocus 作者: 唐细刚 时间: 2010-08-22 功能: VB6调用API打开目标文件所在文件夹且选中目标文件 注&#xff1a; 由于调用 Explorer.exe /select 方式会使系统产生多余的 Explorer.exe 进程 所以还是API来实现较好…

python 保存文件 吃内存_孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化...

孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化(完整学习过程屏幕记录视频地址在文末&#xff0c;手写笔记在文末)一、什么是序列化与反序列化序列化是指将内存中的数据进行指定规则的格式梳理&#xff0c;使之方便按一定格式保存到文件中。我的理…

【Kaggle】Intermediate Machine Learning(管道+交叉验证)

文章目录4. Pipelines 管道5. Cross-Validation 交叉验证上一篇&#xff1a;【Kaggle】Intermediate Machine Learning&#xff08;缺失值文字特征处理&#xff09; 下一篇&#xff1a;【Kaggle】Intermediate Machine Learning&#xff08;XGBoost Data Leakage&#xff09; …

ASP.NET2.0导出Word文档(C#导出DOC)

在网络上看到很多关于ASP.NET导出DOC文档的例子&#xff0c;有的干脆就直接将html页面不做任何处理直接导出为DOC文件&#xff0c;但是那样会有很多错误&#xff0c;例如将某些控件显示为图片。我还曾经见过微软为中国某个大公司制作的一个XX系统&#xff0c;导出的DOC文件实际…

java todo error_java.sql.SQLException: sql injection violation, syntax error: TODO UNIQUE unique

wenshao 你好&#xff0c;想跟你请教个问题&#xff1a;我是在用activiti工作流的时候 初始化生成流程表产生了下面的问题工作流引擎代码&#xff1a;ProcessEngineConfiguration config ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();config.se…

ASP VBScript 函数速查表

VBScript函数 功能说明 例子 Abs &#xff08;数值&#xff09;绝对值。一个数字的绝对值是它的正值。空字符串 (null) 的绝对值&#xff0c;也是空字符串。未初始化的变数&#xff0c;其绝对为 0例子&#xff1a;ABS(-2000) 结果&#xff1a;2000Array &#xff08;以逗点分…

LeetCode 201. 数字范围按位与(位运算)

文章目录1. 题目2. 解题2.1 按位查找02.2 两数直接都往右移动&#xff0c;直到相等1. 题目 给定范围 [m, n]&#xff0c;其中 0 < m < n < 2147483647&#xff0c;返回此范围内所有数字的按位与&#xff08;包含 m, n 两端点&#xff09;。 示例 1: 输入: [5,7] 输…

编php矩阵求和,PHP二维数组如何求和?

PHP二维数组求和的方法&#xff1a;1、使用array_sum和array_map函数求和1)、PHP7.2以下可用<?php $arr array(0>array(id>1,tol>10),1>array(id>3,tol>12),2>array(id>8,tol>5));//输出tol值的和echo array_sum(array_map(create_function($v…

LeetCode 1311. 获取你好友已观看的视频(BFS+哈希map+vector排序)

1. 题目 有 n 个人&#xff0c;每个人都有一个 0 到 n-1 的唯一 id 。 给你数组 watchedVideos 和 friends &#xff0c;其中 watchedVideos[i] 和 friends[i] 分别表示 id i 的人观看过的视频列表和他的好友列表。 Level 1 的视频包含所有你好友观看过的视频&#xff0c; …

发布ASP.NET程序至IIS7

以前一直和IIS5打交道&#xff0c;后来系统升级到WIN7,自然的就用上了IIS7了&#xff0c;不过因为对IIS7服务器没有系统的了解&#xff0c;所以在自己机子上测试发布网站时&#xff0c;总是遇到各种各样的问题&#xff0c;当时就放弃了&#xff0c;准备有时间再研究的&#xff…

php请求来源,php验证请求页面来源

php教程验证请求页面来源if( $_server[http_x_requested_with] xmlhttprequest ) {echo ajax;} else {echo normal;}jquery内部实现ajax的时候&#xff0c;已经加入了标识jquery源码中是这样的&#xff1a;xhr.setrequestheader("x-requested-with", "xmlhttpr…