105. 从前序与中序遍历序列构造二叉树 Golang实现

题目描述:

给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。

思路分析:

image

其实每次遍历就是划分左右子树数组,然后同样的递归先得到左右子树的根节点,再依次划分即可。注意下标索引的写法即可,下标的关键在于左右子树的节点数量是一致的,通过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
}
posted @ 2024-11-22 17:44  wochh  阅读(6)  评论(0编辑  收藏  举报