当前位置:网站首页>【二叉树】从二叉树一个节点到另一个节点每一步的方向
【二叉树】从二叉树一个节点到另一个节点每一步的方向
2022-08-03 13:01:00 【豪冷啊】
0x00 题目
给你一棵 二叉树 的根节点 root
这棵二叉树总共有 n
个节点
每个节点的值为 1
到 n
中的一个整数
且互不相同
给你一个整数 startValue
表示起点节点 s
的值
和另一个不同的整数 destValue
表示终点节点 t
的值
请找到从节点 s
到节点 t
的 最短
路径
并以字符串的形式返回每一步的方向
每一步用 大写
字母 ‘L’ ,‘R’ 和 ‘U’ 分别表示一种方向:
L
表示从一个节点前往它的 左孩子
节点R
表示从一个节点前往它的 右孩子
节点U
表示从一个节点前往它的 父
节点
请你返回从 s 到 t 最短路径
每一步的方向
0x01 思路
因为有 2
个目标
所以有 2
条路径
先把 2
条路径找出来
然后再找出最近
的公共祖先
最后再拼接路径
0x02 解法
语言:Swift
树节点:TreeNode
public class TreeNode {
public var val: Int
public var left: TreeNode?
public var right: TreeNode?
public init() { self.val = 0; self.left = nil; self.right = nil; }
public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
self.val = val
self.left = left
self.right = right
}
}
解法:
func getDirections(_ root: TreeNode?, _ startValue: Int, _ destValue: Int) -> String {
guard let root = root else { return "" }
// 第一条路径
var path1: [(TreeNode, String)] = []
// 第二条路径
var path2: [(TreeNode, String)] = []
// 结果
var res = ""
// 节点和方向
var arr: [(TreeNode, String)] = []
func dfs(_ root: TreeNode?, _ val: Int, _ type: String) {
guard let root = root else { return }
// 添加
arr.append((root, type))
if root.val == val {
if val == startValue {
path1 = Array(arr)
}else if val == destValue {
path2 = Array(arr)
}
return
}
dfs(root.left, val, "L")
dfs(root.right, val, "R")
// 往回走了,删除最后一个
arr.removeLast()
}
// 查找第一条路径
dfs(root, startValue, "")
arr.removeAll()
// 查找第二条路径
dfs(root, destValue, "")
var idx1 = 0
var idx2 = 0
let idx = min(path1.count, path2.count)
// 去掉路径中相同的前缀
while idx1 < idx && idx2 < idx {
let t1 = path1[idx1]
let t2 = path2[idx2]
if t1.0.val == t2.0.val {
idx1 += 1
idx2 += 1
}else{
break
}
}
// 第一条路径是从下往上走,所以把方向全部调整为 `U`
for _ in idx1..<path1.count {
res += "U"
}
// 拼接第二条路径
for i in idx2..<path2.count {
res += path2[i].1
}
return res
}
0x03 我的小作品
欢迎体验我的作品之一:小五笔 86 版
五笔学习好帮手~App Store
搜索即可~
边栏推荐
- tinymce 如何实现动态国际化
- leetcode 448. Find All Numbers Disappeared in an Array 找到所有数组中消失的数字(简单)
- Golang 字符串
- An animation optimization of traditional guide layer animation
- IronOS, an open source system for portable soldering irons, supports a variety of portable DC, QC, PD powered soldering irons, and supports all standard functions of smart soldering irons
- 使用工作队列管理器(三)
- Redis 6 的多线程
- leetcode/字符串中的所有变位词(s1字符串的某个排列是s2的子串)的左索引
- Hanyuan Hi-Tech G8032 standard ERPS ring network switch Gigabit 4 optical 10 electrical industrial Ethernet switch ring network + WEB management + SNMP VLAN planning
- An动画基础之元件的影片剪辑效果
猜你喜欢
An动画基础之按钮动画与基础代码相结合
An animation optimization of traditional guide layer animation
TensorFlow离线安装包
PyTorch builds a classification network model (Mnist dataset, fully connected neural network)
An introduction to the camera
An动画基础之元件的影片剪辑效果
How to disable software from running in the background in Windows 11?How to prevent apps from running in the background in Windows 11
便携烙铁开源系统IronOS,支持多款便携DC, QC, PD供电烙铁,支持所有智能烙铁标准功能
An基本工具介绍之选择线条工具(包教会)
leetcode16 Sum of the closest three numbers (sort + double pointer)
随机推荐
PyTorch builds a classification network model (Mnist dataset, fully connected neural network)
TensorFlow离线安装包
d作者:d的新特性
便携烙铁开源系统IronOS,支持多款便携DC, QC, PD供电烙铁,支持所有智能烙铁标准功能
How to make the history record time-stamped before
An工具介绍之骨骼工具
[数据仓库]分层概念,ODS,DM,DWD,DWS,DIM的概念「建议收藏」
Sogou news-数据集
Yahoo!Answers - data set
【R】用grafify搞定统计绘图、方差分析、干预比较等!
字节最爱问的智力题,你会几道?
svn安装包和客户端
为冲销量下探中低端市场,蔚来新品牌产品定价低至10万?
sessionStorage of BOM series
An animation optimization of traditional guide layer animation
易观分析:2022年Q2中国网络零售B2C市场交易规模达23444.7亿元
Use %Status value
leetcode 448. Find All Numbers Disappeared in an Array 找到所有数组中消失的数字(简单)
How to disable software from running in the background in Windows 11?How to prevent apps from running in the background in Windows 11
Graphic animation and button animation of an animation basic component