简单粗暴,代码有待优化,不过自己独立完成,没有参考任何材料,还是比较满意的

package y2019.Algorithm.stack.medium;

import java.util.Stack;

/**
* @Auther: xiaof
* @Date: 2019/12/6 09:06
* @Description:331. 验证二叉树的前序序列化
*
* 序列化二叉树的一种方法是使用前序遍历。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,
* 我们可以使用一个标记值记录,例如 #。
*
* _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
*
* 来源:力扣(LeetCode)
* 链接:https://leetcode-cn.com/problems/verify-preorder-serialization-of-a-binary-tree
* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
*
*/
public class IsValidSerialization { /**
* 执行用时 : 10 ms , 在所有 java 提交中击败了 43.30% 的用户
* 内存消耗 : 35.5 MB , 在所有 java 提交中击败了 97.06% 的用户
* @param preorder
* @return
* by xiaof 2019年12月6日10:09:08
*/
public boolean solution(String preorder) {
if ("#".equals(preorder)) {
return true;
}
String[] eles = preorder.split(",");
boolean isRight = false;
//默认就是左节点,如果是右节点是#,那么就出栈,如果是左节点是#,那么就切换左右
Stack<String> stack = new Stack(); //如果栈为空的时候,还有最后一个#,那么正好跳出循环
int index = 0;
String curEle = eles[0];
stack.push(eles[index]);
//开始遍历后续元素
for (index = 1; index < eles.length; ++index) {
if ("#".equals(curEle) && isRight) {
return false;
}
if ("#".equals(eles[index])) {
isRight = true;
if (stack.isEmpty()) {
//如果栈已经空了
break;
}
curEle = stack.pop();
} else {
stack.push(eles[index]);
isRight = false;
}
} return stack.isEmpty() && index == (eles.length - 1); } public static void main(String[] args) {
String s = "9,3,4,#,#,1,#,#,2,#,6,#,#";
String s1 = "1,#";
String s2 = "1";
String s3 = "#";
String s4 = "#,#"; IsValidSerialization fuc = new IsValidSerialization(); fuc.solution(s4); } }

【LEETCODE】71、验证二叉树的前序序列化的更多相关文章

  1. Leetcode 331.验证二叉树的前序序列化

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

  2. LeetCode 331. 验证二叉树的前序序列化(Verify Preorder Serialization of a Binary Tree) 27

    331. 验证二叉树的前序序列化 331. Verify Preorder Serialization of a Binary Tree 题目描述 每日一算法2019/5/30Day 27LeetCo ...

  3. Java实现 LeetCode 331 验证二叉树的前序序列化

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

  4. [Leetcode] 第331题 验证二叉树的前序序列化

    一.题目描述 序列化二叉树的一种方法是使用前序遍历.当我们遇到一个非空节点时,我们可以记录下这个节点的值.如果它是一个空节点,我们可以使用一个标记值记录,例如 #. _9_ / \ 3 2 / \ / ...

  5. [Swift]LeetCode331. 验证二叉树的前序序列化 | Verify Preorder Serialization of a Binary Tree

    One way to serialize a binary tree is to use pre-order traversal. When we encounter a non-null node, ...

  6. 331 Verify Preorder Serialization of a Binary Tree 验证二叉树的前序序列化

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

  7. 【LeetCode】144. 二叉树的前序遍历

    144. 二叉树的前序遍历 知识点:二叉树:递归:Morris遍历 题目描述 给你二叉树的根节点 root ,返回它节点值的 前序 遍历. 示例 输入:root = [1,null,2,3] 输出:[ ...

  8. LeetCode 144. 二叉树的前序遍历(Binary Tree Preorder Traversal)

    144. 二叉树的前序遍历 144. Binary Tree Preorder Traversal 题目描述 给定一个二叉树,返回它的 前序 遍历. LeetCode144. Binary Tree ...

  9. LeetCode二叉树的前序、中序、后序遍历(递归实现)

    本文用递归算法实现二叉树的前序.中序和后序遍历,提供Java版的基本模板,在模板上稍作修改,即可解决LeetCode144. Binary Tree Preorder Traversal(二叉树前序遍 ...

随机推荐

  1. 树形DP入门题目推荐以及解析

    关于树形DP几道入门题目 今天恶补树形DP,感觉海星. 其实挺简单的. 介绍几道例题,我会的. 1.洛谷P1352 没有上司的舞会 我的一篇题解 我们可以考虑每一个节点都是有两种情况. 一个是被邀请: ...

  2. 【louguP1502】窗口的星星

    题目链接 用两条扫描线从左往右扫描,距离为W,右边的扫描线扫到就加上,左边的扫到就减去, 线段树上的一点\(x\)维护\((x,x+H)\)的星星总价值,修改时直接修改\((x-H,x)\)就行了 坐 ...

  3. GoCN每日新闻(2019-11-11)

    GoCN每日新闻(2019-11-11) GoCN每日新闻(2019-11-11) 1. Go的内存管理与回收 https://medium.com/a-journey-with-go/go-memo ...

  4. lintcode- 22.平面表

    题目描述 22. 平面列表 给定一个列表,该列表中的每个要素要么是个列表,要么是整数.将其变成一个只包含整数的简单列表. 样例 给定 [1,2,[1,2]],返回 [1,2,1,2]. 给定 [4,[ ...

  5. Gaussian Processes

    原文地址:https://borgwang.github.io/ml/2019/07/28/gaussian-processes.html 一元高斯分布 概率密度函数:\[p(x) = \frac{1 ...

  6. HDU 6212 Zuma

    Zuma 这个题没有素质!它卡常! 我发现网上很多人的题解都写得很奇怪,也不好确定正确性,所以我借这篇题解表达一下愚见 定义$ dp[i][j][0...4]$表示 0:消完了 1:还剩1个0 2:还 ...

  7. 模拟30A 题解

    A. 树 联想起远古考试时做的题 记忆的轮廓. 树上走一些步数的期望. 显然可以直接解方程. 然而复杂度$O(qn^3)$,利用树上的性质优化一下, 直接一遍dfs过程中解出来,可以$O(qnlogm ...

  8. Automated Generation of VNF Deployment Rules Using Infrastructure Affinity Characterization

    标题:Automated Generation of VNF Deployment Rules Using Infrastructure Affinity Characterization 使用基础结 ...

  9. Python快速入门教程【转】

    第一章 Python基础知识 1.1 介绍      1.1.1 特点      Python是一种面向对象.解释型计算机程序设计语言.语法简洁清晰,强制用空白符作为语句缩进.      Python ...

  10. 同一个交换机 局域网内 内网IP ping不通为什么 没关闭windows防火墙

    同一个交换机 局域网内 内网IP  ping不通为什么  没关闭windows防火墙