• 剑指 Offer 07. 重建二叉树


    剑指 Offer 07. 重建二叉树

    地址:剑指 Offer 07. 重建二叉树

    问题描述:

    输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

    例如,给出

    前序遍历 preorder = [3,9,20,15,7]
    中序遍历 inorder = [9,3,15,20,7]
    返回如下的二叉树:

    3

    /
    9 20
    /
    15 7

    限制:

    0 <= 节点个数 <= 5000

    /**
     * Definition for a binary tree node.
     * class TreeNode(var _value: Int) {
     *   var value: Int = _value
     *   var left: TreeNode = null
     *   var right: TreeNode = null
     * }
     */
    //注意算清两侧长度
    object Solution {
        def buildTree(preorder: Array[Int], inorder: Array[Int]): TreeNode = {
            val root = build(preorder, inorder, 0, preorder.length-1, 0, inorder.length-1)
            return root
        }
    
        def build(preorder: Array[Int], inorder: Array[Int], pl: Int, pr: Int, il: Int, ir:Int): TreeNode = {
            if (pl > pr || il > ir) return null
            val pivot = inorder.indexOf(preorder(pl))
            val root = new TreeNode(preorder(pl))
            root.left = build(preorder, inorder, pl+1, pl + (pivot - il) , il, pivot-1)
            root.right = build(preorder, inorder, pl + (pivot - il) + 1, pr, pivot+1, ir)
            return root
        }
    }
    
    /**
     * Definition for a binary tree node.
     * type TreeNode struct {
     *     Val int
     *     Left *TreeNode
     *     Right *TreeNode
     * }
     */
    func buildTree(preorder []int, inorder []int) *TreeNode {
        if len(preorder) == 0 {return nil}
    
        index := 0
        for i := 0; i < len(inorder); i++ {
            if inorder[i] == preorder[0] {
                index = i
                break
            }
        } 
    
        root := &TreeNode{Val: preorder[0]}
        root.Left = buildTree(preorder[1:index+1], inorder[0:index])
        root.Right = buildTree(preorder[index+1:], inorder[index+1:])
    
        return root
    }
    
  • 相关阅读:
    Ubuntu 14.04 下 Chromium 出现 未安装Adobe Flash Player 问题解决
    UESTC 764 失落的圣诞节 --RMQ/线段树
    TopCoder SRM 639 Div.2 500 AliceGameEasy --乱搞
    HDU 4578 Transformation --线段树,好题
    linux下发布操作
    Memcached 安装部署手册
    Java中集中常见的数据结构(转自CSDN,整理编写)
    oracle数据库2种临时表的使用
    weblogic服务部署
    springboot入门学习(一)
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/14141535.html
Copyright © 2020-2023  润新知