From d1f136602be1c41d817cde026548ce9b09bf9e7f Mon Sep 17 00:00:00 2001 From: biubiubiubiubiubiubiu Date: Tue, 12 Mar 2019 10:52:01 +0800 Subject: [PATCH 1/2] add solution 1008 --- ...ry-Search-Tree-from-Preorder-Traversal.png | Bin 0 -> 32151 bytes .../README.md | 80 ++++++++++++++++++ .../Solution.java | 59 +++++++++++++ 3 files changed, 139 insertions(+) create mode 100644 img/Construct-Binary-Search-Tree-from-Preorder-Traversal.png create mode 100644 solution/1008.Construct Binary Search Tree from Preorder Traversal/README.md create mode 100644 solution/1008.Construct Binary Search Tree from Preorder Traversal/Solution.java diff --git a/img/Construct-Binary-Search-Tree-from-Preorder-Traversal.png b/img/Construct-Binary-Search-Tree-from-Preorder-Traversal.png new file mode 100644 index 0000000000000000000000000000000000000000..3423c8333864d3b7dbe03830dfb54f047ccb1cde GIT binary patch literal 32151 zcmeFXg;!in@&F3MB)D5bu;A|Q1b25!aCdhJ?k>SKxVr{-g1cLAcL?vYzuo=zo%b(1 z&T!_=?XK?fs;=r#d08<;I2NagC}ObW#P&`GN|t5q9h9BD5v+O-uNVK`$#z_SyBXjv{d#ZVG+%& zZL?0D?%7R&yWmtXH^k`GMA5^(#JIJ87AAy`B&d7sO04-h1_1?;FuV;85<+<8GN&32 zi}*0}ln)!Qh|;r^XVYmZ(q4_p zfLnEDern+g_P{2UG;D5`26k*&Hlq#>lzq_w%I3|bkLgvWq|hr^!Vp+6U}?etT1;u^ zj{*xz)4!oQ6L^35LXi;So%_9H8=DH}=8A!{stF06-=PwS2M@fXaDN~~KI}xWNR;!4 zDf~006fp>vBOHIfNeJ&ff{`cOGl|w^@DuefMh1Md@h`HoCy4=Nf+^I15Wik|eTK>R z^8;SC^gJNGm#+@pt9H?!b=Qw!0J>J{g^zm$ z&E4r2l&#Glg2(=kO?*`Y1Kr|(o9H7>K=tbmiHIi8)DCUy)q8mP_kKNAc=OyNy-uQO`Qvqs>yuYqsWZ<(q%1I&p|*a>Z|;P3tj} z8j+RBycAiaD13;)JMZ1O%b=WvY1IBen-&q<%5z<228Q3yGT4w}cxBMOQ!g?m@9rdU zW-_#f6D2MaxU~NgLcqxfQ;Q&f_|-mwW4r^__QO7h5+pOZ}24ge*B80 z4ihE-s}4KokN6dS0m<2~{VTsI#MlOy1B%X{dgFZ)^u8pvE2R4`?%&abFt9nF9fgq@ zMQKpDdtvRwJYxt+K%s(hF&HFxsGpe(k!oNl1tnt<2ifv*9`HCL(gntetp@S(p$Mp3UZfzel`z{5?odAVZn_QD#|`EMM{gt${m@suR~i6n9C#o9sUQg4$sT)_8Wv! z--i@f#7}*p-3Zev5XA~q<*`E4o5mzx1w2#8n zxu3K>Bzh6HEVr1p$n^0pII1HTB#wz=#obA`Rg^3?Yc!&>(t4ZkOBU6=7 z^;5}G{h}J8B1!}$G9|83iK$eS@TeS+Tg1=~X6{fhMe~HW`D=?<6X}t;#6D4`VNi#$ zlSah}YKT)7%_zz$ohq&UEGbDVasMeRk6A(|Pph_Cxk3z`(l29Bd< zIKS_&GOYTj5rG-;67eHKju=7gK6)csoh#S5cNX=`N$l|P;L<7F>B!OMkN1?p;kyH) z!}2MM-yYe~N6UwDzq4{WHD2qyC&W);b%~pa!^KVs+~y%zt5`!AQ>?01H{t}da$>)Q zZ%Xvw69>g+DFjX8+E}RZq`9xIrm5HXd8ujHaLKZ!SwDQKWdY8T+LC@b$GO7! zORJ2tRUS+pk7%fq!HT>V|+L~UjD*@v+Yc#JJy9ee&H8;lN+L~F3_9j8u3gkv%s$}p!=)8@n!L}XRIar$lzyOb>Mk}bm0-dqcwNco(<{O&?_YW-To4Il zFleooN5es50IIqxrfaKfj<7uYJ{wUGIY1_0I>5r;LrD9JaWF12>Gz=E3b^(@HbaNS z+2b{a#;WFTMcu`l)tjHX2}Bk|#fj4T^R|2XEAf5!r-&3W7E#{iE+~}d;R|bt>NxxRJYBkji!TCkoTMY7pLy0-mc!M-rGEGY?%(uKJ(#G%Kf54xv?~N!?Z`1@j58V z?+LvLtCU%s3h9!vdQ{v_2Iln1eL4ePzpl2+H=VB99}1p}%+|~b%qFJVr`3vF;62|N z`Qv|VF#jIhv6Qr4g#(v`Do`xfm>>nJYb6d>}e)B5Q-b92(wx!kNiw z;owfX8HcAR%q6mvQi_PYm~1##qi2Zc#^;9VMqo@b%E6%IP-wbWpwUp9H13{8kp8-C z>B;8eJc1j~3BT_+dXv>^h0jFqq&wnS`w$2y=69Nf`j{F9hs~^aNbd^X*

nNzXQ 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 literal 0 HcmV?d00001 diff --git a/solution/1008.Construct Binary Search Tree from Preorder Traversal/README.md b/solution/1008.Construct Binary Search Tree from Preorder Traversal/README.md new file mode 100644 index 0000000000000..9a9d0d9670ef7 --- /dev/null +++ b/solution/1008.Construct Binary Search Tree from Preorder Traversal/README.md @@ -0,0 +1,80 @@ +## 先序遍历构造二叉树 + +### 问题描述 + +返回与给定先序遍历 **preorder** 相匹配的二叉搜索树(binary **search** tree)的根结点。 + +**示例1:** + +``` +输入:[8,5,1,7,10,12] +输出:[8,5,10,1,7,null,12] +``` + +![示例1](/img/Construct-Binary-Search-Tree-from-Preorder-Traversal.png) + +**提示:** + +- `1 <= preorder.length <= 100` +- The values of `preorder` are distinct. + +### 解法 + +二叉树类的题目可以考虑使用递归中的分治法,让本次递归的根节点(sub-root)来管理自身子树的生成方式。而本题使用的是**前序遍历法**所生成的数组,则先检查了根节点,再检查左子树,再检查右子树。因此每层递归我们需要确定的是: + +* 本层递归的根节点是什么? +* 根节点确定后,本层递归之后的左子树范围是什么,右子树的范围是什么? + +对于第一个问题,我们知道前序遍历法的根节点一定是当前范围内的第一个元素;而对于第二个问题,我们知道右子树开始于**第一个比当前根节点大的元素**,而左子树结束于该元素的前面一个元素。在解决了这两个问题后,答案已经比较明确了,在每一层递归中,我们需要一个 start 和一个 end 来表示当前的递归所涉及的元素范围: + +* 确定当前的递归是否结束(start > end || start >= end) +* 确定当前递归层的根节点(start) +* 确定左子树的范围(start + 1, leftEnd - 1)和右子树的范围(leftEnd, end) + +因此有如下的递归解法: + +```java +/** + * Definition for a binary tree node. + * public class TreeNode { + * int val; + * TreeNode left; + * TreeNode right; + * TreeNode(int x) { val = x; } + * } + */ +class Solution { + public TreeNode bstFromPreorder(int[] preorder) { + if (preorder == null || preorder.length == 0) { + return null; + } + // 进入分治法的递归 + return helper(preorder, 0, preorder.length - 1); + } + + private TreeNode helper(int[] preorder, int start, int end) { + // System.out.println("start: " + start + " end: " + end); + // 确认递归结束的标志,当 start == end 时,表示该区间只剩下一个 subRoot 节点 + if (start > end) { + return null; + } + if (start == end) { + return new TreeNode(preorder[start]); + } + // 前序遍历,首先遍历到的为根 + TreeNode root = new TreeNode(preorder[start]); + int leftEnd = start; + while (leftEnd <= end) { + if (preorder[leftEnd] > preorder[start]) { + break; + } + leftEnd++; + } + // System.out.println("leftEnd:" + leftEnd + " num: " + preorder[leftEnd]); + root.left = helper(preorder, start + 1, leftEnd - 1); + root.right = helper(preorder, leftEnd, end); + return root; + } +} +``` + diff --git a/solution/1008.Construct Binary Search Tree from Preorder Traversal/Solution.java b/solution/1008.Construct Binary Search Tree from Preorder Traversal/Solution.java new file mode 100644 index 0000000000000..fb6f24f64c465 --- /dev/null +++ b/solution/1008.Construct Binary Search Tree from Preorder Traversal/Solution.java @@ -0,0 +1,59 @@ +{\rtf1\ansi\ansicpg936\cocoartf1671\cocoasubrtf200 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset134 PingFangSC-Regular;} +{\colortbl;\red255\green255\blue255;} +{\*\expandedcolortbl;;} +\margl1440\margr1440\vieww10800\viewh8400\viewkind0 +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 + +\f0\fs24 \cf0 /**\ + * Definition for a binary tree node.\ + * public class TreeNode \{\ + * int val;\ + * TreeNode left;\ + * TreeNode right;\ + * TreeNode(int x) \{ val = x; \}\ + * \}\ + */\ +class Solution \{\ + public TreeNode bstFromPreorder(int[] preorder) \{\ + if (preorder == null || preorder.length == 0) \{\ + return null;\ + \}\ + // +\f1 \'bd\'f8\'c8\'eb\'b7\'d6\'d6\'ce\'b7\'a8\'b5\'c4\'b5\'dd\'b9\'e9 +\f0 \ + return helper(preorder, 0, preorder.length - 1);\ + \}\ + \ + private TreeNode helper(int[] preorder, int start, int end) \{\ + // System.out.println("start: " + start + " end: " + end);\ + // +\f1 \'c8\'b7\'c8\'cf\'b5\'dd\'b9\'e9\'bd\'e1\'ca\'f8\'b5\'c4\'b1\'ea\'d6\'be\'a3\'ac\'b5\'b1 +\f0 start == end +\f1 \'ca\'b1\'a3\'ac\'b1\'ed\'ca\'be\'b8\'c3\'c7\'f8\'bc\'e4\'d6\'bb\'ca\'a3\'cf\'c2\'d2\'bb\'b8\'f6 +\f0 subRoot +\f1 \'bd\'da\'b5\'e3 +\f0 \ + if (start > end) \{\ + return null;\ + \}\ + if (start == end) \{\ + return new TreeNode(preorder[start]);\ + \}\ + // +\f1 \'c7\'b0\'d0\'f2\'b1\'e9\'c0\'fa\'a3\'ac\'ca\'d7\'cf\'c8\'b1\'e9\'c0\'fa\'b5\'bd\'b5\'c4\'ce\'aa\'b8\'f9 +\f0 \ + TreeNode root = new TreeNode(preorder[start]);\ + int leftEnd = start;\ + while (leftEnd <= end) \{\ + if (preorder[leftEnd] > preorder[start]) \{\ + break;\ + \}\ + leftEnd++;\ + \}\ + // System.out.println("leftEnd:" + leftEnd + " num: " + preorder[leftEnd]);\ + root.left = helper(preorder, start + 1, leftEnd - 1);\ + root.right = helper(preorder, leftEnd, end);\ + return root;\ + \}\ +\}} \ No newline at end of file From 17327d0e354024df09e9bd36b21409362080d2e8 Mon Sep 17 00:00:00 2001 From: biubiubiubiubiubiubiu Date: Tue, 12 Mar 2019 11:05:11 +0800 Subject: [PATCH 2/2] fix solution.java displaying mistake --- .../Solution.java | 101 ++++++++---------- 1 file changed, 42 insertions(+), 59 deletions(-) diff --git a/solution/1008.Construct Binary Search Tree from Preorder Traversal/Solution.java b/solution/1008.Construct Binary Search Tree from Preorder Traversal/Solution.java index fb6f24f64c465..eae491aa6f3bc 100644 --- a/solution/1008.Construct Binary Search Tree from Preorder Traversal/Solution.java +++ b/solution/1008.Construct Binary Search Tree from Preorder Traversal/Solution.java @@ -1,59 +1,42 @@ -{\rtf1\ansi\ansicpg936\cocoartf1671\cocoasubrtf200 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset134 PingFangSC-Regular;} -{\colortbl;\red255\green255\blue255;} -{\*\expandedcolortbl;;} -\margl1440\margr1440\vieww10800\viewh8400\viewkind0 -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 - -\f0\fs24 \cf0 /**\ - * Definition for a binary tree node.\ - * public class TreeNode \{\ - * int val;\ - * TreeNode left;\ - * TreeNode right;\ - * TreeNode(int x) \{ val = x; \}\ - * \}\ - */\ -class Solution \{\ - public TreeNode bstFromPreorder(int[] preorder) \{\ - if (preorder == null || preorder.length == 0) \{\ - return null;\ - \}\ - // -\f1 \'bd\'f8\'c8\'eb\'b7\'d6\'d6\'ce\'b7\'a8\'b5\'c4\'b5\'dd\'b9\'e9 -\f0 \ - return helper(preorder, 0, preorder.length - 1);\ - \}\ - \ - private TreeNode helper(int[] preorder, int start, int end) \{\ - // System.out.println("start: " + start + " end: " + end);\ - // -\f1 \'c8\'b7\'c8\'cf\'b5\'dd\'b9\'e9\'bd\'e1\'ca\'f8\'b5\'c4\'b1\'ea\'d6\'be\'a3\'ac\'b5\'b1 -\f0 start == end -\f1 \'ca\'b1\'a3\'ac\'b1\'ed\'ca\'be\'b8\'c3\'c7\'f8\'bc\'e4\'d6\'bb\'ca\'a3\'cf\'c2\'d2\'bb\'b8\'f6 -\f0 subRoot -\f1 \'bd\'da\'b5\'e3 -\f0 \ - if (start > end) \{\ - return null;\ - \}\ - if (start == end) \{\ - return new TreeNode(preorder[start]);\ - \}\ - // -\f1 \'c7\'b0\'d0\'f2\'b1\'e9\'c0\'fa\'a3\'ac\'ca\'d7\'cf\'c8\'b1\'e9\'c0\'fa\'b5\'bd\'b5\'c4\'ce\'aa\'b8\'f9 -\f0 \ - TreeNode root = new TreeNode(preorder[start]);\ - int leftEnd = start;\ - while (leftEnd <= end) \{\ - if (preorder[leftEnd] > preorder[start]) \{\ - break;\ - \}\ - leftEnd++;\ - \}\ - // System.out.println("leftEnd:" + leftEnd + " num: " + preorder[leftEnd]);\ - root.left = helper(preorder, start + 1, leftEnd - 1);\ - root.right = helper(preorder, leftEnd, end);\ - return root;\ - \}\ -\}} \ No newline at end of file +/** + * Definition for a binary tree node. + * public class TreeNode { + * int val; + * TreeNode left; + * TreeNode right; + * TreeNode(int x) { val = x; } + * } + */ +class Solution { + public TreeNode bstFromPreorder(int[] preorder) { + if (preorder == null || preorder.length == 0) { + return null; + } + // 进入分治法的递归 + return helper(preorder, 0, preorder.length - 1); + } + + private TreeNode helper(int[] preorder, int start, int end) { + // System.out.println("start: " + start + " end: " + end); + // 确认递归结束的标志,当 start == end 时,表示该区间只剩下一个 subRoot 节点 + if (start > end) { + return null; + } + if (start == end) { + return new TreeNode(preorder[start]); + } + // 前序遍历,首先遍历到的为根 + TreeNode root = new TreeNode(preorder[start]); + int leftEnd = start; + while (leftEnd <= end) { + if (preorder[leftEnd] > preorder[start]) { + break; + } + leftEnd++; + } + // System.out.println("leftEnd:" + leftEnd + " num: " + preorder[leftEnd]); + root.left = helper(preorder, start + 1, leftEnd - 1); + root.right = helper(preorder, leftEnd, end); + return root; + } +} \ No newline at end of file