从前序与中序遍历序列构造二叉树
// 从前序与中序遍历序列构造二叉树
package binarytree
import "slices"
// 灵茶山艾府 + leecode官方题解
// 前序遍历、中序遍历、中序遍历的概念
// https://www.bilibili.com/video/BV1Kg411m7Vn/?spm_id_from=333.337.search-card.all.click&vd_source=9c5be9823bfed8ae9daa5a0b4df1ac32
// 写法一
func buildTreeI(preorder, inorder []int) *TreeNode {
n := len(preorder)
if n == 0 { // 空节点
return nil
}
leftSize := slices.Index(inorder, preorder[0]) // 左子树的大小
left := buildTreeI(preorder[1:1+leftSize], inorder[:leftSize])
right := buildTreeI(preorder[1+leftSize:], inorder[1+leftSize:])
return &TreeNode{preorder[0], left, right}
}