构造二叉树
- 算法逻辑
- 从前序或后序数组中,找到根节点Val值,对应为第一个元素或最后一个元素
- 以根节点为切割点,分割中序数组、前/后序数组,注意先分割中序
- 递归方式,得到最终结果
- 疑问:为什么要递归
当将数组分为左子树Val和右子树Val值后,后面的步骤和之前是完全一致的。
均为找到根节点,分割左右子树
所以采用递归方式
通过前序遍历和中序遍历数组构造二叉树
// 通过前序遍历和中序遍历构造二叉树
func buildBinaryTreeII(preorder, inorder []int) *TreeNode {
//
if len(preorder) < 1 {
return nil
}
nodeVal := preorder[0]
if len(preorder) == 1 {
return &TreeNode{Val: nodeVal}
}
root := &TreeNode{Val: nodeVal}
//
var index int
for i := 0; i < len(inorder); i++{
if inorder[i] == nodeVal {
index = i
}
}
//
preLeft, preRight := preorder[1:index+1], preorder[index+1:]
inLeft, inRight := inorder[:index], inorder[index+1:]
//
root.Left = buildBinaryTreeII(preLeft,