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;
    }
}

  

posted @   johnny_zhao  阅读(115)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示