leetcode106

//JS版本的代码
var buildTree = function(inorder, postorder) { let post_idx; const idx_map = new Map(); const helper = (in_left, in_right) => { // 如果这里没有节点构造二叉树了,就结束 if (in_left > in_right) { return null; } // 选择 post_idx 位置的元素作为当前子树根节点 const root_val = postorder[post_idx]; const root = new TreeNode(root_val); // 根据 root 所在位置分成左右两棵子树 const index = idx_map.get(root_val); // 下标减一 post_idx--; // 构造右子树 root.right = helper(index + 1, in_right); // 构造左子树 root.left = helper(in_left, index - 1); return root; } // 从后序遍历的最后一个元素开始 post_idx = postorder.length - 1; // 建立(元素,下标)键值对的哈希表 let idx = 0; inorder.forEach((val, idx) => { idx_map.set(val, idx); }); return helper(0, inorder.length - 1); };

  

posted @ 2021-05-06 18:03  KYSpring  阅读(36)  评论(0编辑  收藏  举报