LeetCode 2096. 从二叉树一个节点到另一个节点每一步的方向(最小公共祖先)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

给你一棵 二叉树 的根节点 root ,这棵二叉树总共有 n 个节点。
每个节点的值为 1 到 n 中的一个整数,且互不相同
给你一个整数 startValue ,表示起点节点 s 的值,和另一个不同的整数 destValue ,表示终点节点 t 的值。

请找到从节点 s 到节点 t 的 最短路径 ,并以字符串的形式返回每一步的方向。
每一步用 大写 字母 ‘L’ ,‘R’ 和 ‘U’ 分别表示一种方向:

  • 'L' 表示从一个节点前往它的 左孩子 节点。
  • 'R' 表示从一个节点前往它的 右孩子 节点。
  • 'U' 表示从一个节点前往它的 节点。

请你返回从 s 到 t 最短路径 每一步的方向。

示例 1:
在这里插入图片描述

输入:root = [5,1,2,3,null,6,4], 
startValue = 3, destValue = 6
输出:"UURL"
解释:最短路径为:31526

示例 2:
在这里插入图片描述

输入:root = [2,1], startValue = 2, destValue = 1
输出:"L"
解释:最短路径为:21 。提示:
树中节点数目为 n 。
2 <= n <= 10^5
1 <= Node.val <= n
树中所有节点的值 互不相同 。
1 <= startValue, destValue <= n
startValue != destValue

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/step-by-step-directions-from-a-binary-tree-node-to-another
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 先求解两个点的最小公共祖先 p
  • 然后 dfs1 求解 p 到 start 的步数 x,得到答案有 x 个 U
  • 再 dfs2 求解 p 到 end 的路径,就是答案的 后半部分
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {int stepdowntofindstart = -1;bool finddest = false;string pathtodest, path;
public:string getDirections(TreeNode* root, int startValue, int destValue) {TreeNode* p = lowestcommonParent(root, startValue, destValue);dfs1(p, startValue, 0);dfs2(p, destValue);if(stepdowntofindstart)return string(stepdowntofindstart, 'U') + pathtodest;return pathtodest;}TreeNode* lowestcommonParent(TreeNode* root, int sv, int dv){ // 最小公共祖先if(!root) return root;if(root->val == sv || root->val == dv)return root;auto l = lowestcommonParent(root->left, sv, dv);auto r = lowestcommonParent(root->right, sv, dv);if(l && r) return root;return l ? l : r;}void dfs1(TreeNode* root, int sv, int step){  // 最小祖先到 start 的步数if(stepdowntofindstart != -1 || !root) return;if(root->val == sv){stepdowntofindstart = step;return;}dfs1(root->left, sv, step+1);dfs1(root->right, sv, step+1);}void dfs2(TreeNode* root, int dv){  // 最小祖先到 end 的路径 pathif(finddest || !root) return;if(root->val == dv){finddest = true;pathtodest = path;return;}path.push_back('L');dfs2(root->left, dv);path.pop_back();path.push_back('R');dfs2(root->right, dv);path.pop_back();}
};

164 ms 111.3 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

LeetCode 2097. 合法重新排列数对(欧拉路径)

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的二维整数数组 pairs &#xff0c;其中 pairs[i] [starti, endi] 。如果 pairs 的一个重新排列&#xff0c;满足对每一个下标 i &#xff08; 1 < i < pairs.length &#xff09;都有 endi-1 starti &#xff0c…

《如何在大学里脱颖而出(How to Win at College)》读书笔记

《如何在大学里脱颖而出(How to Win at College)》读书笔记 图书简介 中文版&#xff1a; 英文版&#xff1a; 作者卡尔纽波特&#xff08;Cal Newport&#xff09;于 2004 年6月以优等生荣誉学会会员身份毕业于达特茅斯学院。曾在《华尔街日报》的学报和《今日商务》等杂志上发…

LeetCode 2099. 找到和最大的长度为 K 的子序列

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums 和一个整数 k 。 你需要找到 nums 中长度为 k 的 子序列 &#xff0c;且这个子序列的 和最大 。 请你返回 任意 一个长度为 k 的整数子序列。 子序列 定义为从一个数组里删除一些元素后&#xff0c;不改变剩下元素的顺…

cms安装教程Linux,DoraCMS安装教程(linux)

最近在熟悉linux环境&#xff0c;也基本上把DoraCMS部署上去了&#xff0c;本教程基于ubuntu server 14.0.4&#xff0c;其它linux版本部署方式基本上差不多&#xff0c;下面详细说明一下&#xff1a;1、进入server环境下&#xff0c;在ubuntu目录下建立文件夹softbak,我们用来…

LeetCode 2100. 适合种地的日子(计数)

文章目录1. 题目2. 解题1. 题目 你和一群强盗准备种地。给你一个下标从 0 开始的整数数组 security &#xff0c;其中 security[i] 是第 i 天 天气热的数量。日子从 0 开始编号。同时给你一个整数 time 。 如果第 i 天满足以下所有条件&#xff0c;我们称它为一个适合种地的日…

如何在linux中使用u盘,如何在Linux系统下使用U盘

如何在Linux系统下使用U盘Linux系统中U盘被视为SCSI设备, SCSI设备对应的设备文件格式为“sdX” 系统中的第一个SCSI设备表示“sda”&#xff0c;第二个表示为“sdb”等。下面是jy135小编收集整理的U盘里面的.如何在Linux系统下使用U盘&#xff0c;欢迎阅读。在Linux系统下&…

linux sys存放内容,了解linux系统目录,sys,tmp,usr,var!

原标题&#xff1a;了解linux系统目录&#xff0c;sys,tmp,usr,var&#xff01;linux小白到大神的成长之路&#xff1a;了解linux系统目录&#xff0c;sys,tmp,usr,var&#xff01;本经验由宗龙龙原创,全文共600多字&#xff0c;阅读需要14分钟&#xff0c;如果文中存在错误&am…

LeetCode 2101. 引爆最多的炸弹(图的遍历)

文章目录1. 题目2. 解题1. 题目 给你一个炸弹列表。一个炸弹的 爆炸范围 定义为以炸弹为圆心的一个圆。 炸弹用一个下标从 0 开始的二维整数数组 bombs 表示&#xff0c;其中 bombs[i] [xi, yi, ri] 。xi 和 yi 表示第 i 个炸弹的 X 和 Y 坐标&#xff0c;ri 表示爆炸范围的…

vim学习笔记(3)眼花缭乱的Vim模式

vim的模式问题&#xff0c;网上说的比较乱&#xff0c;我仔细的查了一下资料&#xff0c;并在这里做一个总结。 总的来说是六大种模式&#xff0c;分别是&#xff1a; 普通(Normal) 可视(Visual) 选择(Select) 插入(Insert) 命令行(Command-line) Ex模式。 还有六个小的组合模式…

linux脚本大全,shell大全

命令解析器——例如bash是一个程序&#xff0c;可以解析shell命令shell基本语法变量环境变量敲命令“env”可以取出所有环境变量环境变量可以当全局变量来使用set命令可以输出当前系统的全部环境变量以及函数unset命令用于删除一个环境变量本地变量自定义的变量——局限在某个脚…

LeetCode 2103. 环和杆(位运算)

文章目录1. 题目2. 解题1. 题目 总计有 n 个环&#xff0c;环的颜色可以是红、绿、蓝中的一种。 这些环分布穿在 10 根编号为 0 到 9 的杆上。 给你一个长度为 2n 的字符串 rings &#xff0c;表示这 n 个环在杆上的分布。 rings 中每两个字符形成一个 颜色位置对 &#xff0…

小米平板2刷Linux教程,小米平板2刷机教程 官方线刷图文教程

小米平板2刷机教程 官方线刷机教程小米平板2官方线刷教程1、准备工作&#xff0c;下载刷机工具和刷机包下载小米官方刷机工具点击下载小米线刷工具>>>下载小米平板2刷机包&#xff0c;点击小米平板2刷机资源>>>2、在小米平板上的操作&#xff0c;关机状态下&…

LeetCode 2104. 子数组范围和(单调栈)

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums 。nums 中&#xff0c;子数组的 范围 是子数组中最大元素和最小元素的差值。 返回 nums 中 所有 子数组范围的 和 。 子数组是数组中一个连续 非空 的元素序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输…

C++的虚函数表

这里的例子全部来自陈皓的C 虚函数表解析&#xff0c;经过修改的。 编译器&#xff1a;g (Ubuntu 4.9.2-10ubuntu13) 4.9.2 环境&#xff1a;ubuntu 15.04 64位系统&#xff08;地址占8字节&#xff09; 例子1&#xff1a; 1 #define LL long long2 3 class Base {4 public:5 …

Hadoop学习笔记—10.Shuffle过程那点事儿

Hadoop学习笔记—10.Shuffle过程那点事儿 一、回顾Reduce阶段三大步骤 在第四篇博文《初识MapReduce》中&#xff0c;我们认识了MapReduce的八大步骤&#xff0c;其中在Reduce阶段总共三个步骤&#xff0c;如下图所示&#xff1a; 其中&#xff0c;Step2.1就是一个Shuffle操作&…

已安装Anaconda情况下,命令行pip,python报错(详细 已解决)

已安装Anaconda情况下&#xff0c;命令行pip,python报错&#xff08;已解决&#xff09; 这是报错截图 解决方案如下&#xff1a; 1.首先可以去找到anaconda文件夹&#xff0c;并打开该文件目录下的Script文件夹&#xff0c;查看是否有pip.exe文件&#xff0c;并查看是否配置…

LeetCode 2105. 给植物浇水 II(双指针)

文章目录1. 题目2. 解题1. 题目 Alice 和 Bob 打算给花园里的 n 株植物浇水。 植物排成一行&#xff0c;从左到右进行标记&#xff0c;编号从 0 到 n - 1 。其中&#xff0c;第 i 株植物的位置是 x i 。 每一株植物都需要浇特定量的水。 Alice 和 Bob 每人有一个水罐&#x…

通过Cisco packet Tracer 划分vlan实现不同交换机间pc进行通信

通过Cisco packet Tracer 划分vlan实现不同交换机间pc进行通信 交换机端口类型介绍&#xff1a; vlan 1.命令行实现将端口 fa0/4 fa0/5 fa0/6分配到vlan3: 2.命令行实现两个交换机模式由access切换为trunk,使得不同交换机中相同vlan中的PC能够进行通信

linux xp镜像文件,让Windows XP镜像文件小一点儿(转)

让Windows XP镜像文件小一点儿(转)[more]近日笔者的一位朋友遇上件烦心事儿&#xff0c;他发现安装好Windows XP Professional和Services Pack 1a补丁升级文件后&#xff0c;其文件大小总和已达到1.7GB容量。而用Ghost备份后的lmage镜像文件也有1.2GB之大&#xff0c;不能将它储…

Packet Tracer配置交换机详细步骤(实验)

1.首先建立如下图所示的网络拓扑结构 这里需要注意 PC 与 交换机switch交换机之间的连线方式&#xff1a; 1&#xff09;连线方式选择 控制台连线 2&#xff09;switch 中需要选择 console接口&#xff1b; 3&#xff09;PC 中需要选择 RS 232接口 2.点击PC -> 选择桌面 -…