树
的
还
原
过
程
根
据
中
序
遍
历
和后
续
遍
历
的
特
性
进
行
树
的
还
原
过
程
分
析
:
1、首先在后序遍历序列中找到根节点(最后一个元素)
2、根据根节点在中序遍历序列中找到根节点的位置
3、根据根节点的位置将中序遍历序列分为左子树和右子树
4、根据根节点的位置确定左子树和右子树在中序数组和后续数组中的左右边界位置
5、递归构造左子树和右子树
6、返回根节点结束
树
的
还
原
过
程
变
量
定
义
定
义
变
量
帮
助
进
行
树
的
还
原
:
1、HashMap memo 需要哈希表来保存中序遍历序列中,元素和索引的位置关系。因
为从后序序列中拿到根节点后,要在中序序列中查找对应的位置,从而将数组分为
左子树和右子树
2、int ri 根节点在中序遍历数组中的索引。
3、中序遍历数组的两个位置标记 [is, ie],is 是起始位置,ie 是结束位置
4、后序遍历数组的两个位置标记 [ps, pe] ps 是起始位置,pe 是结束位置
位
置
关
系
的
计
算
在
找
到
根
节
点
位
置
以
后
,
要
定
下一
轮
中
,
左
子
树
和右
子
树
在
中
序
数
组
和后
续
数
组
中
的
左
右
边
界
的
位
置
。
1、左子树-中序数组 is = is, ie = ri - 1
2、左子树-后序数组 ps = ps, pe = ps + ri - is - 1 (pe计算过程解释,后续数组的起始
位置加上左子树长度-1 就是后后序数组结束位置了,左子树的长度 = 根节点索引-左
子树)
3、右子树-中序数组 is = ri + 1, ie = ie
4、右子树-后序数组 ps = ps + ri - is, pe - 1
评论0