zoukankan      html  css  js  c++  java
  • 剑指 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
    }
    
  • 相关阅读:
    简单封装的ajax请求
    mysql-8.0 安装教程(自定义配置文件,密码方式已修改)
    计算机专业术语
    mvc路由
    Chosen三级联动
    Chosen通用初始化
    .NET Core学习之路
    Sql的一些常规判断
    CORS 跨域
    SQL 的一个技巧
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/14141535.html
Copyright © 2011-2022 走看看