Golang:
思路:因为前序和后序是没有办法构建一个唯一的二叉树序列的,所以需要在某些方面自定规则,比如[1,2],[2,1],这里将这种序列定义为一个左子树
代码如下:
func constructFromPrePost(pre []int, post []int) *TreeNode {
node:=&TreeNode{Val: pre[0]}
//长度至少要大于1才能构建子树
if len(pre)>1{
i:=0
for i<len(post){
if post[i]==pre[1]{
break
}
i++
}
//长度大于1,因此按照自定义的规则来说,必然可以构建左子树
node.Left=constructFromPrePost(pre[1:i+2],post[0:i+1])
//可能存在右子树,那么构建右子树
if i+2<len(pre){
node.Right=constructFromPrePost(pre[i+2:],post[i+1:len(post)-1])
}
}
return node
}
有疑问加站长微信联系(非本文作者)