zoukankan      html  css  js  c++  java
  • 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
    * */

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

      

  • 相关阅读:
    ubuntu 20.04 安装mysql
    vim 编辑器常用命令备份
    各个Iot Cloud对MQTT协议的支持
    Linux下sleep函数与usleep函数加Windows下的Sleep函数
    localtime、localtime_s、localtime_r的使用
    Windows平台下利用openssl配置产生SSL认证文件
    转载
    转载- 常见arduino型号(版本)比较
    转载
    转载
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/10328550.html
Copyright © 2011-2022 走看看