040_从前序与中序遍历序列构造二叉树

知识点:前序遍历、中序遍历、二叉树

LeetCode第一百零五题:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/

这里留个作业:如何优化时间复杂度?答案是:使用个map,记录每个元素在inorder中的位置,省得每层递归里面都要遍历一次。另外,这题还有个迭代的实现方式,怎么做呢?

语言:GoLang

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func buildTree(preorder []int, inorder []int) *TreeNode {
    length := len(inorder)
    if length == 0 {
        return nil
    }

    i := 0
    for ; i < length; i++ {
        if inorder[i] == preorder[0] {
            break
        }
    }
    
    return &TreeNode{
        preorder[0], 
        buildTree(preorder[1:i+1], inorder[:i]), 
        buildTree(preorder[i+1:], inorder[i+1:]),
    }
}
posted @ 2020-03-28 16:48  Cenyol  阅读(99)  评论(0)    收藏  举报