看到很多人都是重建二叉树再后序遍历,其实可以直接算出后序遍历的字符串。
前序: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))