105. 从前序与中序遍历序列构造二叉树 Golang实现
题目描述:
给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。
思路分析:
其实每次遍历就是划分左右子树数组,然后同样的递归先得到左右子树的根节点,再依次划分即可。注意下标索引的写法即可,下标的关键在于左右子树的节点数量是一致的,通过pos以及inorder中左右子树的节点数量即可进行划分。
同样的方法可以解决106题。
点击查看代码
func buildTree(preorder []int, inorder []int) *TreeNode {
if len(preorder)==0{
return nil
}
root := &TreeNode{Val:preorder[0]}
preorder = preorder[1:]
for pos,node := range inorder{
if node == root.Val {
root.Left = buildTree(preorder[:len(inorder[:pos])],inorder[:pos])
root.Right = buildTree(preorder[len(inorder[:pos]):],inorder[pos+1:])
}
}
return root
}