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:]),
}
}