当前位置:网站首页>【二叉树】根据描述创建二叉树
【二叉树】根据描述创建二叉树
2022-08-04 15:38:00 【豪冷啊】
0x00 题目
给你一个二维整数数组 descriptions
其中 descriptions[i] = [parenti, childi, isLefti]
表示parenti
是 childi
在 二叉树 中的 父节点
二叉树中各节点的值 互不相同
此外:
如果 isLefti == 1
,那么 childi
就是 parenti
的左
子节点
如果 isLefti == 0
,那么 childi
就是 parenti
的右
子节点
请你根据 descriptions 的描述来构造二叉树并返回其 根节点
0x01 思路
根据所给的数据
创建节点
与父节点
再通过一个字典
保存对应的
节点与其父节点
最后再判断那个不存在
父节点的节点
就是根
节点
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 createBinaryTree(_ descriptions: [[Int]]) -> TreeNode? {
if descriptions.isEmpty { return nil }
// 值对应的节点
var dic: [Int:TreeNode] = [:]
// 值对应的父节点
var per: [Int:TreeNode] = [:]
// 那些父节点的值
var arr: [Int] = []
for i in 0..<descriptions.count {
let t = descriptions[i]
let p = t[0]
let c = t[1]
let isLeft = t[2]
// 取出父节点和子节点
var pNode = dic[p]
var cNode = dic[c]
// 不存在就创建
if pNode == nil {
pNode = TreeNode(p)
dic[p] = pNode
// 添加到数组
arr.append(p)
}
if cNode == nil {
cNode = TreeNode(c)
dic[c] = cNode
}
// 值对应的父节点
per[c] = pNode
if isLeft == 1 {
pNode!.left = cNode
}else{
pNode!.right = cNode
}
}
var root: TreeNode? = nil
// 从可能的父节点中寻找,没有父节点的,就是根节点
for i in 0..<arr.count {
let val = arr[i]
if per[val] == nil {
root = dic[val]
}
}
return root
}
0x03 我的小作品
欢迎体验我的作品之一:小五笔
五笔学习好帮手~App Store
搜索即可~
边栏推荐
- Task Computing【动态规划_牛客】
- 面渣逆袭:MySQL六十六问,两万字+五十图详解
- 如何防止重复下单?
- 7 天学个Go,Go 结构体 + Go range 来学学
- JVM调优-GC基本原理和调优关键分析
- Roslyn 在多开发框架让 msbuild 的 Target 仅运行一次
- Xi'an Zongheng Information × JNPF: Adapt to the characteristics of Chinese enterprises, fully integrate the cost management and control system
- What are the useful IT asset management platforms?
- 无心剑七绝《七夕牵手》
- dotnet core 添加 SublimeText 编译插件
猜你喜欢
附加:自定义注解(参数校验注解);(写的不好,别看…)
Redis的主从复制和集群
邮差"头":{“retCode”:“999999”
弄懂#if #ifdef #if defined
【伸手党福利】投影仪初学者入门——投影亮度及幕布选择——从入门到精通
Flutter 运动鞋商铺小demo
从-99打造Sentinel高可用集群限流中间件
Http-Sumggling缓存漏洞分析
Legal education combined with VR panorama, intuitively feel and learn the spirit of the rule of law
从-99打造Sentinel高可用集群限流中间件
随机推荐
基于 Next.js实现在线Excel
洛谷题解P1028 数的计算
李沐的深度学习笔记来了!
Pisanix v0.2.0 发布|新增动态读写分离支持
remote: Check Access Error, please check your access right or username and password!fatal: Authenti
Summary of some pytorch knowledge points that have been updated for a long time
2022杭电多校4
浅谈一下跨端技术方案
Byte、Short、Integer、Long内部缓存类的对比与源码分析
Codeforces Round #811 A~F
在Markdown文件中快速插入本地图片
云存储硬核技术内幕——(11) 女子会所的秘密
Http-Sumggling缓存漏洞分析
2022杭电多校3
GPS satellite synchronization clock, NTP network synchronization clock, Beidou clock server (Jingzhun)
GPS卫星同步时钟,NTP网络同步时钟,北斗时钟服务器(京准)
《2022 年上半年全球独角兽企业发展研究报告》发布——DEMO WORLD世界创新峰会圆满落幕
【Gopher 学个函数】边学边练,简单为 Go 上个分
Go 言 Go 语,一文看懂 Go 语言文件操作
MySQL select加锁分析