文章目录

  • 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"
解释:最短路径为:3 → 1 → 5 → 2 → 6 。

示例 2:

输入:root = [2,1], startValue = 2, destValue = 1
输出:"L"
解释:最短路径为:2 → 1 。提示:
树中节点数目为 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阿明),一起加油、一起学习进步!

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

  1. 两节点的最小公共祖先LCA

    一.二叉搜索树中两节点的最小公共祖先: 最初级的题目,在一颗二叉搜索树中寻找两节点的最小公共祖先.根据二叉搜索树的特征,从根节点开始查找,若两节点的val值都小于当前节点,则他们的最小公共祖先就去左子 ...

  2. 二叉树 最小公共祖先 c++版

    LCA(最近公共祖先)算法的逻辑是基于递归的思想来实现的.在这个代码中,我们使用分治策略来寻找给定节点 p 和 q 的最近公共祖先.具体原理如下: 如果当前根节点为 -1,表示树为空,返回 -1,表示 ...

  3. LeetCode 1257. 最小公共区域(最小公共祖先)

    文章目录 1. 题目 2. 解题 1. 题目 给你一些区域列表 regions ,每个列表的第一个区域都包含这个列表内所有其他区域. 很自然地,如果区域 X 包含区域 Y ,那么区域 X 比区域 Y ...

  4. LeetCode 1650. 二叉树的最近公共祖先 III(哈希)

    文章目录 1. 题目 2. 解题 1. 题目 给定一棵二叉树中的两个节点 p 和 q,返回它们的最近公共祖先节点(LCA). 每个节点都包含其父节点的引用(指针).Node 的定义如下: class ...

  5. 代码随想录算法训练营第22天 二叉树 java :235. 二叉树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

    文章目录 LeetCode 236. 二叉树的最近公共祖先 题目讲解 思路 LeetCode 701.二叉搜索树中的插入操作 题目讲解 思路 LeetCode 450.删除二叉搜索树中的节点 题目讲解 ...

  6. 由浅入深:求给定两个树节点的最低公共祖先(二叉树、普通树结构)JAVA实现

    最近看了一道面试题目,觉得很有意思,而且常常被问到,今天综合归纳了一下这道题目,并给出了各种变形题目,附上JAVA版的程序解答. 题目是这样的:寻找二叉树的最低公共祖先?(其中隐含着一个盲点:树是什么 ...

  7. 算法攻关 - 二叉树的最近公共祖先 (O(n))_236

    文章目录 一.题目描述 二.思路 三.代码实现 四.小结 一.题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先.百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 ...

  8. [二叉树] 二叉树的最近公共祖先--leetcode236

    给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表示为一个节点 x,满足 x 是 p.q 的祖先且 ...

  9. leetcode题解236-二叉树的最近公共祖先

    问题描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表示为一个节点 x,满足 x 是 p.q ...

最新文章

  1. 运筹学(最优化理论)学习笔记 | 分支定界法
  2. 开盘即破发,网易有道赴美上市,继续发力在线教育
  3. Luogu P3321 [SDOI2015]序列统计
  4. 带你深入理解分布式事务,掌握后台分布式核心技术,PS:送5本!
  5. SpringMVC+hibernate+mysql+EASYUI的登陆+CRUD
  6. HDU 6321 Problem C. Dynamic Graph Matching (状压dp)
  7. 按120分计算成绩 mysql_Mysql实用教程试卷B.doc
  8. Spring Data Jpa出现“Table ‘XXX.hibernate_sequence‘ doesn‘t exist”
  9. MySQL百万级高并发网站优化
  10. 【翻译】优秀网站的10个技巧
  11. ofo走出校园观察:市场定位导致产品错位?
  12. 07_封装丶静态和工具类
  13. ngrok 通过外网链接映射到本地机器,支持http,https
  14. 独自一人开发返利平台小程序日记(准备开源中):万事开头难,既然做了,那就只能咬牙坚持了
  15. linux 主机卫士安装及使用
  16. 新西兰计算机预科学费,新西兰留学预科学费
  17. Three.js(十二)——骨骼动画、变形动画
  18. 希腊神话:希腊众神 宙斯和赫拉
  19. 达人评测 R5 7530U和i5 1240p选哪个好
  20. 金仓数据库KingbaseES表空间(tablespace)知多少

热门文章

  1. fiber报错 (type *big.Int has no field or method FillBytes)
  2. python中格式化字符串
  3. 配置hiveserver2访问hive
  4. ap模式和sta模式共存_AP+AC组网下的本地转发及集中转发
  5. C++的迭代器Interator
  6. iOS关于armv7,armv7s,arm64,i386,x86_64等问题
  7. 逆水寒7月19服务器维护,逆水寒7月19日更新维护公告 更新内容汇总
  8. 用计算机计算出密码,自带计算器的密码
  9. c语言实现线性表的算法,数据结构算法代码实现——线性表的定义(一)
  10. C语言srand((unsigned)time(NULL))…