给定一颗二叉树的 (【先序遍历】 或者 【后序遍历】)和 【中序遍历】 可以恢复这颗二叉树。
    给定一颗二叉搜索树 【先序遍历】 和 【后序遍历】对其进行排序即可得到【中序遍历】,然后再其进行恢复。
    但是其实对于二叉搜索树,我们可以简化(【先序遍历】 和 【后序遍历】 => 【中序遍历】)的步骤,例如:在得到后序遍历的结果后,在重建的过程中,因为根节点是最后一个,所以我们右后往前,拿到值的是时候,进行大小的比较,来判断这个点是左节点(小于的)还是右节点(大于的);
    参考:449题,leetcode 449

    1. //序列化,生成后序遍历的结果。
    2. var serialize = function(root) {
    3. const ans = [];
    4. const midTravel = (node)=>{
    5. if(node ===null) return
    6. midTravel(node.left);
    7. midTravel(node.right)
    8. ans.push(node.val);
    9. }
    10. midTravel(root);
    11. return ans.join(',')
    12. };
    13. /**
    14. * Decodes your encoded data to tree.
    15. *
    16. * @param {string} data
    17. * @return {TreeNode}
    18. */
    19. var deserialize = function(data) {
    20. const n = data.length;
    21. if(n===0) return null
    22. // 拿到数组
    23. const stack = data.split(',').map(v => parseInt(v));
    24. const construct =(low,top)=>{
    25. if(stack.length===0 || stack[stack.length-1] <low || stack[stack-1]>top){
    26. return null
    27. }
    28. const val = stack.pop();
    29. const node = new TreeNode(val)
    30. node.right = construct(val,top);
    31. node.left = construct(low,val)
    32. return node
    33. }
    34. return construct(-Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER);
    35. };