题目:

序列化二叉树的一种方法是使用 前序遍历 。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录
给定一串以逗号分隔的序列,验证它是否是正确的二叉树的前序序列化。编写一个在不重构树的条件下的可行算法

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

给出的输入格式一定是有效的,它永远不会包含两个连续的逗号,比如:"1,,3"
要求:不允许重建树

示例1:
输入:preorder = “9,3,4,#,#,1,#,#,2,#,6,#,#”
输出:true

示例2:
输入:preorder = “1,#”
输出:false

示例3:
输入:preorder = “9,#,#,1”
输出:false

代码

  1. public boolean treeNotdVerification(String preorder) {
  2. int t = 0;
  3. int y = 0;
  4. for(int i = 0; i < preorder.length(); i++){
  5. char s = preorder.charAt(i);
  6. if(s =='#'){
  7. t++;
  8. }else if(s != ','){
  9. y++;
  10. while(++i < preorder.length() && Character.isDigit(preorder.charAt(i))){
  11. --i;
  12. }
  13. }
  14. if(i < preorder.length() - 1 && t >= y+1){
  15. return false;
  16. }
  17. }
  18. return t==y+1;
  19. }