[leetcode - Bliend-75 ] 105. Construct Binary Tree from Preo

Given two integer arrays preorder and inorder where preorder is the preorder traversal of a binary tree and inorder is the inorder traversal of the same tree, construct and return the binary tree.

利用 preorder 和 inorder 构建一个 Binary tree

Example

http://img2.58codes.com/2024/20124767dzBLqSptiT.png

Inputpreorder = [3,9,20,15,7]inorder = [9,3,15,20,7]Output: [3,9,20,null,null,15,7]

Step

Preorder 的特性 Preorder 的第一个 itme 是整颗 tree 的 root node,而利用 preorder[0] 的值寻找该 item 是在 Inorder 的哪一个 order,该 item 在 inorder 中他的左边代表 tree 的 left sub tree 而右边则是 right sub tree
http://img2.58codes.com/2024/2012476770jHD9ybHt.jpg


接着 preorder 往下一个 item 移动并找到该 item 存在于 inorder 的哪一个地方,在 inorder 中该 item 的左边没有东西了,所以判定 left sub tree 到该 item 后便结束
http://img2.58codes.com/2024/20124767TOk5IQpRAa.jpg


preorder 接着往下并找到该 item 存在于 inorder 的那一个地方,而该 item 就是这颗 sub tree 的 root node,藉由该 item 找到该 root 的 left sub tree 和 right sub tree。
http://img2.58codes.com/2024/20124767g69Zl2ZpiJ.jpg

Coding

/** * @param {number[]} preorder * @param {number[]} inorder * @return {TreeNode}*/var buildTree = function(preorder, inorder) {  if (!preorder.length || !inorder.length) return null;  let root = new TreeNode(preorder[0]);  // find where is root index in order array  let midIdx = inorder.findIndex(o => o === preorder[0]);      root.left = buildTree(preorder.slice(1, midIdx + 1), inorder.slice(0, midIdx));  root.right = buildTree(preorder.slice(midIdx + 1), inorder.slice(midIdx + 1));  return root;};

Time complexity: O(n)


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章