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

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); } }

最新文章

  1. innodb_ft_max_token_size取值范围
  2. 【Android进阶系列教程】前言
  3. javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection
  4. (转)assert()函数用法总结
  5. Webservice、WSDL三种服务访问的方式【转】
  6. linux gnome 安装
  7. 关于json中对象的删除
  8. 泛型? extents super
  9. c语言else匹配问题
  10. NYOJ 104 最大子矩阵(二维DP)
  11. Xamarin For Visual Studio 3.7.165 完整离线破解版
  12. centos7下安装docker(dockerfile常用的指令)
  13. margin:auto你真的理解么?
  14. Html5 Page Creator,简易h5页面场景制作
  15. 深浅copy详解
  16. 【redis】redis常用命令及操作记录
  17. C/S权限系统(一)
  18. Impala 学习
  19. PHP 5.2、5.3、5.4、5.5、5.6 对比以及功能详解
  20. [deb]制作deb包

热门文章

  1. url的组成部分
  2. 数列的前$n$项和$S_n$的求法
  3. 【luoguP2989】[USACO10MAR]对速度的需要Need For Speed
  4. [golang][gui]Hands On GUI Application Development in Go【在Go中动手进行GUI应用程序开发】读书笔记03-拒交“智商税”,解密“GUI”运行之道
  5. nginx.conf 配置解析之 http配置
  6. js 创建xml元素
  7. js中for..of..的使用和迭代器
  8. How To Wake Up at 5 A.M. Every Day
  9. mysql原生sql处理,按逗号拆分列为多行
  10. Xamarin.FormsShell基础教程(2)创建Shell解决方案