105. Construct Binary Tree from Preorder and Inorder Traversal
/**
* 105. Construct Binary Tree from Preorder and Inorder Traversal
*
* https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/description/
*
* Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
For example, given
preorder = [3,9,20,15,7]
inorder = [9,3,15,20,7]
Return the following binary tree:
3
/ \
9 20
/ \
15 7
* */
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | class Solution { class TreeNode(var `val`: Int = 0 ) { var left: TreeNode? = null ; var right: TreeNode? = null ; } fun buildTree(preorder: IntArray, inorder: IntArray): TreeNode? { if (preorder.isEmpty() || inorder.isEmpty()) return null ; val map = HashMap<Int, Int>(); for ((index, element) in inorder.withIndex()) { map.put(element, index); } return help(preorder, 0 , preorder.size - 1 , inorder, 0 , inorder.size - 1 , map); } fun help( preorder: IntArray, pLeft: Int, pRight: Int, inorder: IntArray, iLeft: Int, iRight: Int, map: HashMap<Int, Int> ): TreeNode? { if (pLeft > pRight || iLeft > iRight) return null ; val node = TreeNode(preorder[pLeft]); val rootIndex:Int = map.get(preorder[pLeft])!!; //not-null assertion operator:!! convert Int? to Int node.left = help(preorder, pLeft+ 1 , pLeft+rootIndex-iLeft,inorder,iLeft,rootIndex- 1 ,map); node.right = help(preorder, pLeft+rootIndex-iLeft+ 1 ,pRight,inorder,rootIndex+ 1 ,iRight,map); return node; } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)