From b2dd7b6dfc9673125deefaf5b6133c81539ecce6 Mon Sep 17 00:00:00 2001 From: huangge1199 Date: Fri, 23 Apr 2021 13:22:07 +0800 Subject: [PATCH] =?UTF-8?q?331:=E9=AA=8C=E8=AF=81=E4=BA=8C=E5=8F=89?= =?UTF-8?q?=E6=A0=91=E7=9A=84=E5=89=8D=E5=BA=8F=E5=BA=8F=E5=88=97=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ifyPreorderSerializationOfABinaryTree.java | 72 +++++++++++++++++++ ...erifyPreorderSerializationOfABinaryTree.md | 35 +++++++++ 2 files changed, 107 insertions(+) create mode 100644 LeetCode/src/main/java/leetcode/editor/cn/VerifyPreorderSerializationOfABinaryTree.java create mode 100644 LeetCode/src/main/java/leetcode/editor/cn/VerifyPreorderSerializationOfABinaryTree.md diff --git a/LeetCode/src/main/java/leetcode/editor/cn/VerifyPreorderSerializationOfABinaryTree.java b/LeetCode/src/main/java/leetcode/editor/cn/VerifyPreorderSerializationOfABinaryTree.java new file mode 100644 index 0000000..d2c2a20 --- /dev/null +++ b/LeetCode/src/main/java/leetcode/editor/cn/VerifyPreorderSerializationOfABinaryTree.java @@ -0,0 +1,72 @@ +//序列化二叉树的一种方法是使用前序遍历。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如 #。 +// +// _9_ +// / \ +// 3 2 +// / \ / \ +// 4 1 # 6 +/// \ / \ / \ +//# # # # # # +// +// +// 例如,上面的二叉树可以被序列化为字符串 "9,3,4,#,#,1,#,#,2,#,6,#,#",其中 # 代表一个空节点。 +// +// 给定一串以逗号分隔的序列,验证它是否是正确的二叉树的前序序列化。编写一个在不重构树的条件下的可行算法。 +// +// 每个以逗号分隔的字符或为一个整数或为一个表示 null 指针的 '#' 。 +// +// 你可以认为输入格式总是有效的,例如它永远不会包含两个连续的逗号,比如 "1,,3" 。 +// +// 示例 1: +// +// 输入: "9,3,4,#,#,1,#,#,2,#,6,#,#" +//输出: true +// +// 示例 2: +// +// 输入: "1,#" +//输出: false +// +// +// 示例 3: +// +// 输入: "9,#,#,1" +//输出: false +// Related Topics 栈 +// 👍 310 👎 0 + +package leetcode.editor.cn; + +//331:验证二叉树的前序序列化 +public class VerifyPreorderSerializationOfABinaryTree { + public static void main(String[] args) { + //测试代码 + Solution solution = new VerifyPreorderSerializationOfABinaryTree().new Solution(); + } + + //力扣代码 + //leetcode submit region begin(Prohibit modification and deletion) + class Solution { + public boolean isValidSerialization(String preorder) { + if (preorder == null || "#".equals(preorder)) { + return true; + } + String[] strs = preorder.split(","); + int num = 1; + for (int i = 0; i < strs.length; i++) { + String str = strs[i]; + if (num == 1 && "#".equals(str) && i != strs.length - 1) { + return false; + } + if ("#".equals(str)) { + num--; + } else { + num++; + } + } + return num == 0; + } + } +//leetcode submit region end(Prohibit modification and deletion) + +} \ No newline at end of file diff --git a/LeetCode/src/main/java/leetcode/editor/cn/VerifyPreorderSerializationOfABinaryTree.md b/LeetCode/src/main/java/leetcode/editor/cn/VerifyPreorderSerializationOfABinaryTree.md new file mode 100644 index 0000000..df965ee --- /dev/null +++ b/LeetCode/src/main/java/leetcode/editor/cn/VerifyPreorderSerializationOfABinaryTree.md @@ -0,0 +1,35 @@ +

序列化二叉树的一种方法是使用前序遍历。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如 #

+ +
     _9_
+    /   \
+   3     2
+  / \   / \
+ 4   1  #  6
+/ \ / \   / \
+# # # #   # #
+
+ +

例如,上面的二叉树可以被序列化为字符串 "9,3,4,#,#,1,#,#,2,#,6,#,#",其中 # 代表一个空节点。

+ +

给定一串以逗号分隔的序列,验证它是否是正确的二叉树的前序序列化。编写一个在不重构树的条件下的可行算法。

+ +

每个以逗号分隔的字符或为一个整数或为一个表示 null 指针的 '#'

+ +

你可以认为输入格式总是有效的,例如它永远不会包含两个连续的逗号,比如 "1,,3"

+ +

示例 1:

+ +
输入: "9,3,4,#,#,1,#,#,2,#,6,#,#"
+输出: true
+ +

示例 2:

+ +
输入: "1,#"
+输出: false
+
+ +

示例 3:

+ +
输入: "9,#,#,1"
+输出: false
+
Related Topics
  • \n
  • 👍 310
  • 👎 0
  • \ No newline at end of file