2021-08-01:如果只给定一个二叉树前序遍历数组pre和中序遍历数

2021-08-01:如果只给定一个二叉树前序遍历数组pre和中序遍历数

2021-08-01:如果只给定一个二叉树前序遍历数组pre和中序遍历数组in,能否不重建树,而直接生成这个二叉树的后序数组并返回。已知二叉树中没有重复值。

福大大答案2021-08-01:

先序遍历:根左右。

中序遍历:左根右。

先序遍历找到【根】,在中序找到【根】的位置,计算出【左】长度和【右】长度。放在后序遍历相应位置。最后递归。

代码用golang编写。代码如下:

packagemainimport“fmt”funcmain(){pre:=[]int{1,2,3}in:=[]int{2,1,3}ret:=preInToPos2(pre,in)fmt.Println(ret)}funcpreInToPos2(pre[]int,in[]int)[]int{ifpre==nil||in==nil||len(pre)!=len(in){returnnil}N:=len(pre)inMap:=make(map[int]int)fori:=0;i<N;i++{inMap[in[i]]=i}pos:=make([]int,N)process2(pre,0,N-1,in,0,N-1,pos,0,N-1,inMap)returnpos}funcprocess2(pre[]int,L1int,R1int,in[]int,L2int,R2int,pos[]int,L3int,R3int,inMapmap[int]int){ifL1>R1{return}ifL1==R1{pos[L3]=pre[L1]return}pos[R3]=pre[L1]mid:=inMap[pre[L1]]leftSize:=mid-L2process2(pre,L1+1,L1+leftSize,in,L2,mid-1,pos,L3,L3+leftSize-1,inMap)process2(pre,L1+leftSize+1,R1,in,mid+1,R2,pos,L3+leftSize,R3-1,inMap)}

执行结果如下:

***

左神java代码

本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。