从前序遍历与中序遍历序列构造二叉树

我们可以知道 中序遍历时先遍历完左子树 再遍历根结点最后遍历右子树,前序遍历是先遍历根结点再遍历左子树,最后遍历右子树,综上可知,前序遍历的(根+左子树)个数 = 中序遍历的(左子树+根)个数。利用这个性质,可知下边的:

对于前序遍历(根左右)

设前序遍历出的数组开始下标为preLeft,结束为preRight

根 左子树 右子树 preLeft [preLeft+1,pIndex-inLeft+preLeft] [pIndex-inLeft+preLeft+1,preRight]

对于中序遍历(左根右)

设中序遍历出数组开始下标为inLeft,结束下标为inRight

左子树 根 右子树 [inLeft-pIndex-1] pIndex [pIndex+1,inRight]
经验分享 程序员 微信小程序 职场和发展