面试题07. 重建二叉树 Golang

面试题07. 重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

例如,给出

前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:

. 3
. / \
9 20
… / \
…15 7。

限制:

0 <= 节点个数 <= 5000

思路

中序遍历就是把树拍扁得到的数组,前序遍历的第一个节点就是这个树的根节点。
根据这个根节点可以把中序遍历拆分为左右子树的中序遍历。
然后通过递归把左右子树的根节点拎出来,最终重构二叉树。

我的解答

func buildTree(preorder []int, inorder []int) (Head *TreeNode ){
    if len(inorder)==0{
        return nil
    }
    for _,vp:=range preorder{
        for ii,vi:=range inorder{
            if vp==vi{
                Left:=buildTree(preorder,inorder[:ii])
                Right:=buildTree(preorder,inorder[ii+1:])
                Head:= &TreeNode{
                    Val:vp,
                    Left:Left,
                    Right:Right,
                }
                return Head
            }
        }
    }
    return
}
发布了38 篇原创文章 · 获赞 0 · 访问量 1040

猜你喜欢

转载自blog.csdn.net/Cyan1956/article/details/104638859
今日推荐