看到很多人都是重建二叉树再后序遍历,其实可以直接算出后序遍历的字符串。
前序:ABDEC
中序:DBEAC
后序:DEBCA
第一轮递归中,我们可以找到规律:
根节点为A,左树节点为DBE,右树节点为C。
从这可以看出后序的结果是左树节点 + 右树节点 + A拼起来的,从而在每次递归里,将A放在最后即可。
完整代码:
var [preOrder, midOrder] = readline().split(/\s+/);
function computedPost(pre, mid) {
var root = pre[0], strLen = pre.length;
if (strLen < 1) {
return ''
} else if (strLen < 2) {
return root;
}
var m = 0
while (mid[m] !== root) {
m++
}
return computedPost(
pre.slice(1, m + 1),
mid.slice(0, m)
) + computedPost(
pre.slice(m + 1),
mid.slice(m + 1)
) + root
}
print(computedPost(preOrder, midOrder))