ds-algo-study
Version:
Just experimenting with publishing a package
188 lines (184 loc) • 16.3 kB
HTML
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="A description of the page and its contents" />
<link rel="stylesheet" href="styles.css" />
<title>Page Title</title>
<link rel="stylesheet" href="./../../../../assets/style.css" />
<link rel="stylesheet" href="./../../../../assets/prism.css" />
<script async src="./../../../../assets/prism.js"></script>
</head>
<body>
<div id=">pre data-role=" codeBlock" data-info="js" class="language-javascript"><code><a title="1"><span >/*</span></a>
<a title="2"><span > View the full problem and run the test cases at:</span></a>
<a title="3"><span > https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/</span></a>
<a title="4"><span >Given preorder and inorder traversal of a tree, construct the binary tree.</span></a>
<a title="5"><span >Note:</span></a>
<a id=-6" title="6"><span >You may assume that duplicates do not exist in the tree.</span></a>
<a title="7"><span >For example, given</span></a>
<a title="8"><span >preorder = [3,9,20,15,7]</span></a>
<a title="9"><span >inorder = [9,3,15,20,7]</span></a>
<a id=-10" title="10"><span >Return the following binary tree:</span></a>
<a title="11"><span > 3</span></a>
<a id=-12" title="12"><span > / \</span></a>
<a id=-13" title="13"><span > 9 20</span></a>
<a id=-14" title="14"><span > / \</span></a>
<a id=-15" title="15"><span > 15 7</span></a>
<a id=-16" title="16"><span >/**</span></a>
<a id=-17" title="17"><span > * Definition for a binary tree node.</span></a>
<a id=-18" title="18"><span > * function TreeNode(val, left, right) {</span></a>
<a id=-19" title="19"><span > * this.val = (val===undefined ? 0 : val)</span></a>
<a id=-20" title="20"><span > * this.left = (left===undefined ? null : left)</span></a>
<a id=-21" title="21"><span > * this.right = (right===undefined ? null : right)</span></a>
<a id=-22" title="22"><span > * }</span></a>
<a id=-23" title="23"><span > */</span></a>
<a id=-24" title="24"><span >/**</span></a>
<a id=-25" title="25"><span> * </span><span>@param </span><span >{number[]} preorder</span></a>
<a id=-26" title="26"><span> * </span><span>@param </span><span >{number[]} inorder</span></a>
<a id=-27" title="27"><span> * </span><span>@return {TreeNode}</span></a>
<a id=-28" title="28"><span >var buildTree = function(preorder, inorder) {</span></a>
<a id=-29" title="29"><span >};</span></a>
<a id=-30" title="30"><span >*/</span></a>
<a id=-31" title="31"><span >class</span> TreeNode <span >{</span></a>
<a id=-32" title="32"> <span >constructor</span>(val) <span >{</span></a>
<a id=-33" title="33"> <span >this</span>.<span >val</span> <span >=</span> val<span >;</span></a>
<a id=-34" title="34"> <span >this</span>.<span >left</span> <span >=</span> <span >null;</span></a>
<a id=-35" title="35"> <span >this</span>.<span >right</span> <span >=</span> <span >null;</span></a>
<a id=-36" title="36"> <span >}</span></a>
<a id=-37" title="37"><span >}</span></a>
<a id=-38" title="38"><span >let</span> a <span >=</span> <span >new</span> <span >TreeNode</span>(<span >"a"</span>)<span >;</span></a>
<a id=-39" title="39"><span >let</span> b <span >=</span> <span >new</span> <span >TreeNode</span>(<span >"b"</span>)<span >;</span></a>
<a id=-40" title="40"><span >let</span> c <span >=</span> <span >new</span> <span >TreeNode</span>(<span >"c"</span>)<span >;</span></a>
<a id=-41" title="41"><span >let</span> d <span >=</span> <span >new</span> <span >TreeNode</span>(<span >"d"</span>)<span >;</span></a>
<a id=-42" title="42"><span >let</span> e <span >=</span> <span >new</span> <span >TreeNode</span>(<span >"e"</span>)<span >;</span></a>
<a id=-43" title="43"><span >let</span> f <span >=</span> <span >new</span> <span >TreeNode</span>(<span >"f"</span>)<span >;</span></a>
<a id=-44" title="44"><span >let</span> g <span >=</span> <span >new</span> <span >TreeNode</span>(<span >"g"</span>)<span >;</span></a>
<a id=-45" title="45"><span >let</span> h <span >=</span> <span >new</span> <span >TreeNode</span>(<span >"h"</span>)<span >;</span></a>
<a id=-46" title="46"><span >let</span> i <span >=</span> <span >new</span> <span >TreeNode</span>(<span >"i"</span>)<span >;</span></a>
<a id=-47" title="47"><span >let</span> j <span >=</span> <span >new</span> <span >TreeNode</span>(<span >"j"</span>)<span >;</span></a>
<a id=-48" title="48"><span >let</span> k <span >=</span> <span >new</span> <span >TreeNode</span>(<span >"k"</span>)<span >;</span></a>
<a id=-49" title="49"><span >let</span> l <span >=</span> <span >new</span> <span >TreeNode</span>(<span >"l"</span>)<span >;</span></a>
<a id=-50" title="50"><span >let</span> m <span >=</span> <span >new</span> <span >TreeNode</span>(<span >"m"</span>)<span >;</span></a>
<a id=-51" title="51"><span >a</span>.<span >left</span> <span >=</span> b<span >;</span></a>
<a id=-52" title="52"><span >a</span>.<span >right</span> <span >=</span> c<span >;</span></a>
<a id=-53" title="53"><span >b</span>.<span >left</span> <span >=</span> d<span >;</span></a>
<a id=-54" title="54"><span >b</span>.<span >right</span> <span >=</span> e<span >;</span></a>
<a id=-55" title="55"><span >c</span>.<span >left</span> <span >=</span> f<span >;</span></a>
<a id=-56" title="56"><span >c</span>.<span >right</span> <span >=</span> g<span >;</span></a>
<a id=-57" title="57"><span >h</span>.<span >left</span> <span >=</span> i<span >;</span></a>
<a id=-58" title="58"><span >h</span>.<span >right</span> <span >=</span> k<span >;</span></a>
<a id=-59" title="59"><span >i</span>.<span >right</span> <span >=</span> j<span >;</span></a>
<a id=-60" title="60"><span >k</span>.<span >left</span> <span >=</span> l<span >;</span></a>
<a id=-61" title="61"><span >l</span>.<span >right</span> <span >=</span> m<span >;</span></a>
<a id=-62" title="62"><span >//--------------------------------------\\</span></a>
<a id=-63" title="63"><span >console</span>.<span >log</span>( a )<span >;</span></a>
<a id=-64" title="64"><span >console</span>.<span >log</span>(h)</a>
<a id=-65" title="65"><span >console</span>.<span >log</span>(<span >'a.val: ',</span> <span >a</span>.<span >val</span>)<span >;</span></a>
<a id=-66" title="66"><span >console</span>.<span >log</span>(<span >'b.val: ',</span> <span >b</span>.<span >val</span>)<span >;</span></a>
<a id=-67" title="67"><span >console</span>.<span >log</span>(<span >'a.left: ',</span> <span >a</span>.<span >left</span>)<span >;</span></a>
<a id=-68" title="68"><span >console</span>.<span >log</span>( <span >'a.right: ',</span> <span >a</span>.<span >right</span> )<span >;</span></a>
<a id=-69" title="69"><span >console</span>.<span >log</span>(<span >"h.left: ",</span> <span >h</span>.<span >left</span>)<span >;</span></a>
<a id=-70" title="70"><span >//--------------------------------------------------------------------------------------\\</span></a>
<a id=-71" title="71"><span >console</span>.<span >log</span>(</a>
<a id=-72" title="72">
<span>"//--------------------------------------------------------------------------------------</span><span>\\"</span></a>
<a id=-73" title="73">)<span >;</span></a>
<a id=-74" title="74"><span >const</span> preO <span >=</span> [<span >3,</span> <span >9,</span> <span >20,</span> <span >15,</span> <span >7</span>]<span >;</span></a>
<a id=-75" title="75"><span >const</span> inO <span >=</span> [<span >9,</span> <span >3,</span> <span >15,</span> <span >20,</span> <span >7</span>]<span >;</span></a>
<a id=-76" title="76"><span >function</span> <span >buildTree</span>(preorder<span >,</span> inorder) <span >{</span></a>
<a id=-77" title="77"> <span >if</span> (<span >!preorder</span>.<span >length</span> <span >&&</span> <span >!inorder</span>.<span >length</span>) <span >return</span> <span >null;</span></a>
<a id=-78" title="78"> <span >// the first element in the preorder array is the root</span></a>
<a id=-79" title="79"> <span >let</span> root <span >=</span> <span >new</span> <span >TreeNode</span>(preorder[<span >0</span>])<span >;</span></a>
<a id=-80" title="80"> <span >let</span> rootIdx <span >=</span> <span >inorder</span>.<span >indexOf</span>(preorder[<span >0</span>])<span >;</span></a>
<a id=-81" title="81"> <span >// the left subtree is everything in the inorder array to the left of the root</span></a>
<a id=-82" title="82"> <span >let</span> leftInorder <span >=</span> <span >inorder</span>.<span >slice</span>(<span >0,</span> rootIdx)<span >;</span></a>
<a id=-83" title="83"> <span >// the right subtree is everything in the inorder array to the right of the root</span></a>
<a id=-84" title="84"> <span >let</span> rightInorder <span >=</span> <span >inorder</span>.<span >slice</span>(rootIdx <span >+</span> <span >1</span>)<span >;</span></a>
<a id=-85" title="85"> <span >// to build the left subtree, the values in the leftPreorder array have to be the same as the ones in the leftInorder array</span></a>
<a id=-86" title="86"> <span >let</span> leftPreorder <span >=</span> <span >preorder</span>.<span >filter</span>((val) <span >=></span> <span >leftInorder</span>.<span >includes</span>(val))<span >;</span></a>
<a id=-87" title="87"> <span >// to build the left subtree, the values in the leftPreorder array have to be the same as the ones in the leftInorder array</span></a>
<a id=-88" title="88"> <span >let</span> rightPreorder <span >=</span> <span >preorder</span>.<span >filter</span>((val) <span >=></span> <span >rightInorder</span>.<span >includes</span>(val))<span >;</span></a>
<a id=-89" title="89"> <span >root</span>.<span >left</span> <span >=</span> <span >buildTree</span>(leftPreorder<span >,</span> leftInorder)<span >;</span></a>
<a id=-90" title="90"> <span >root</span>.<span >right</span> <span >=</span> <span >buildTree</span>(rightPreorder<span >,</span> rightInorder)<span >;</span></a>
<a id=-91" title="91"> <span >return</span> root<span >;</span></a>
<a id=-92" title="92"><span >}</span></a>
<a id=-93" title="93"><span >console</span>.<span >log</span>(</a>
<a id=-94" title="94">
<span>"//--------------------------------------------------------------------------------------</span><span>\\"</span></a>
<a id=-95" title="95">)<span >;</span></a>
<a id=-96" title="96"><span >buildTree</span>( preO<span >,</span> inO )<span >;</span></a>
<a id=-97" title="97"><span >console</span>.<span >log</span>(<span >'buildTree( preO, inO ): ',</span> <span >buildTree</span>( preO<span >,</span> inO ))<span >;</span></a>
<a id=-98" title="98"><span >//--------------------------results below--------------------------------------------</span></a>
<a id=-99" title="99"><span >/*</span></a>
<a id=-100" title="100"><span >node 105-Construct\ Binary\ Tree\ from\ Preorder\ and\ Inorder\ Traversal.js</span></a>
<a id=-101" title="101"><span >TreeNode {</span></a>
<a id=-102" title="102"><span > val: 'a',</span></a>
<a id=-103" title="103"><span > left: TreeNode {</span></a>
<a id=-104" title="104"><span > val: 'b',</span></a>
<a id=-105" title="105"><span > left: TreeNode { val: 'd', left: null, right: null },</span></a>
<a id=-106" title="106"><span > right: TreeNode { val: 'e', left: null, right: null }</span></a>
<a id=-107" title="107"><span > },</span></a>
<a id=-108" title="108"><span > right: TreeNode {</span></a>
<a id=-109" title="109"><span > val: 'c',</span></a>
<a id=-110" title="110"><span > left: TreeNode { val: 'f', left: null, right: null },</span></a>
<a id=-111" title="111"><span > right: TreeNode { val: 'g', left: null, right: null }</span></a>
<a id=-112" title="112"><span > }</span></a>
<a id=-113" title="113"><span >}</span></a>
<a id=-114" title="114"><span >TreeNode {</span></a>
<a id=-115" title="115"><span > val: 'h',</span></a>
<a id=-116" title="116"><span > left: TreeNode {</span></a>
<a id=-117" title="117"><span > val: 'i',</span></a>
<a id=-118" title="118"><span > left: null,</span></a>
<a id=-119" title="119"><span > right: TreeNode { val: 'j', left: null, right: null }</span></a>
<a id=-120" title="120"><span > },</span></a>
<a id=-121" title="121"><span > right: TreeNode {</span></a>
<a id=-122" title="122"><span > val: 'k',</span></a>
<a id=-123" title="123"><span > left: TreeNode { val: 'l', left: null, right: [TreeNode] },</span></a>
<a id=-124" title="124"><span > right: null</span></a>
<a id=-125" title="125"><span > }</span></a>
<a id=-126" title="126"><span >}</span></a>
<a id=-127" title="127"><span >a.val: a</span></a>
<a id=-128" title="128"><span >b.val: b</span></a>
<a id=-129" title="129"><span >a.left: TreeNode {</span></a>
<a id=-130" title="130"><span > val: 'b',</span></a>
<a id=-131" title="131"><span > left: TreeNode { val: 'd', left: null, right: null },</span></a>
<a id=-132" title="132"><span > right: TreeNode { val: 'e', left: null, right: null }</span></a>
<a id=-133" title="133"><span >}</span></a>
<a id=-134" title="134"><span >a.right: TreeNode {</span></a>
<a id=-135" title="135"><span > val: 'c',</span></a>
<a id=-136" title="136"><span > left: TreeNode { val: 'f', left: null, right: null },</span></a>
<a id=-137" title="137"><span > right: TreeNode { val: 'g', left: null, right: null }</span></a>
<a id=-138" title="138"><span >}</span></a>
<a id=-139" title="139"><span >h.left: TreeNode {</span></a>
<a id=-140" title="140"><span > val: 'i',</span></a>
<a id=-141" title="141"><span > left: null,</span></a>
<a id=-142" title="142"><span > right: TreeNode { val: 'j', left: null, right: null }</span></a>
<a id=-143" title="143"><span >}</span></a>
<a id=-144" title="144"><span >//--------------------------------------------------------------------------------------\</span></a>
<a id=-145" title="145"><span >//--------------------------------------------------------------------------------------\</span></a>
<a id=-146" title="146"><span >buildTree( preO, inO ): TreeNode {</span></a>
<a id=-147" title="147"><span > val: 3,</span></a>
<a id=-148" title="148"><span > left: TreeNode { val: 9, left: null, right: null },</span></a>
<a id=-149" title="149"><span > right: TreeNode {</span></a>
<a id=-150" title="150"><span > val: 20,</span></a>
<a id=-151" title="151"><span > left: TreeNode { val: 15, left: null, right: null },</span></a>
<a id=-152" title="152"><span > right: TreeNode { val: 7, left: null, right: null }</span></a>
<a id=-153" title="153"><span > }</span></a>
<a id=-154" title="154"><span >}</span></a>
<a id=-155" title="155"><span >\___________________________________________________</span></a>
<a id=-156" title="156"><span >bryan_dir:105-construct-b-tree_exitstatus:0 ====></span></a>
<a id=-157" title="157"><span ><---------------------------------------------------></span></a>
<a id=-158" title="158"><span >/*************************************</span></a>
<a id=-159" title="159"><span > * PREORDER = [3,9,20,15,7] *</span></a>
<a id=-160" title="160"><span > * INORDER = [9,3,15,20,7] *</span></a>
<a id=-161" title="161"><span > * RETURN THE FOLLOWING BINARY TREE: *</span></a>
<a id=-162" title="162"><span > * 3 *</span></a>
<a id=-163" title="163"><span > * / \ *</span></a>
<a id=-164" title="164"><span > * 9 20 *</span></a>
<a id=-165" title="165"><span > * / \ *</span></a>
<a id=-166" title="166"><span > * 15 7 *</span></a>
<a id=-167" title="167"><span > *************************************/</span></a></code></pre></div>
</body>
</html>