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

      

  • 相关阅读:
    c++ 模板<template class T>
    HTML Agility Pack 搭配 ScrapySharp,彻底解除Html解析的痛苦
    用1年的经验做了10年还是,用10年的经验做一件事.
    last_inset_id()mysql注意
    小心变成这样一个人!!!
    主动哥
    转:开个小书店。。呵呵
    mysql 更改主键信息
    磁盘预录
    评估项目
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/10328550.html
Copyright © 2011-2022 走看看