当前位置:网站首页>【二叉树】重建二叉树
【二叉树】重建二叉树
2022-08-09 04:10:00 【豪冷啊】
0x00 题目
输入某二叉树的前序
遍历和中序
遍历的结果
请构建
该二叉树并返回其根
节点
假设输入的前序遍历和中序遍历的
结果中都不含
重复的数字
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 buildTree(_ preorder: [Int], _ inorder: [Int]) -> TreeNode? {
// 中序遍历中,值 对应的 索引
var dict: [Int:Int] = [:]
for i in 0..<inorder.count {
dict[inorder[i]] = i
}
func build(_ preorder: [Int], _ preStart: Int, _ preEnd: Int, _ inorder: [Int], _ inStart: Int, _ inEnd: Int) -> TreeNode? {
if preStart > preEnd || inStart > inEnd {
return nil
}
let val = preorder[preStart]
// 对应的索引
let index = dict[val]!
// 左子树在数组中的长度
let leftSize = index - inStart
let root = TreeNode(val)
root.left = build(preorder, preStart+1, preStart+leftSize, inorder, inStart, index-1)
root.right = build(preorder, preStart+leftSize+1, preEnd, inorder, index+1, inEnd)
return root
}
let node = build(preorder, 0, preorder.count-1, inorder, 0, inorder.count-1)
return node
}
0x03 我的小作品
欢迎体验我的作品之一:小编辑器-XCompiler
小巧的在线编辑器App Store
搜索即可~
边栏推荐
猜你喜欢
随机推荐
MutationObserver接口(一) 基本用法
数据库指标是怎么个意思
30 norm
了解CV和RoboMaster视觉组(五)滤波器、观测器和预测方法:自适应滤波器
Error detected while processing /home/test/.vim/plugin/visualmark.vim
From brute force recursion to dynamic programming leetcode Question 62: Different paths
sklearn(一)
器件可靠性与温度的关系
软件质效领航者 | 优秀案例•国金证券DevOps建设项目
How to resolve the conflict between LAN segment and WAN segment when Honor router (WS831) is used as wireless relay
卷积神经网络模型训练——入门理解
OpenCV相机标定完全指南(有手就行)
uniapp uview uselect 时间选择 日期生成代码
One Pass 1258 - Digital Pyramid (Dynamic Programming)
别跟客户扯细节
3年半测试经验,20K我都没有,看来是时候跳槽了...
MySql.Data.MySqlClient.DBNull
etcd学习笔记 - 入门
Talking about the process and how to create it
(a) 7 classes and objects