zoukankan      html  css  js  c++  java
  • 【数据结构】算法 Verify Preorder Serialization of a Binary Tree 验证二叉树前序序列化

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

    前序遍历是啥就不说了,百度一下, 简单说就是root-> left_child->right_child.被前序序列化的二叉树就是一个按照前序遍历的顺序,空节点用#来标识。

     
    该二叉树可以被序列化
    "9,3,4,#,#,1,#,#,2,#,6,#,#"
    
    
    
    Input: preorder = "9,3,4,#,#,1,#,#,2,#,6,#,#"
    Output: true
    
    Input: preorder = "1,#"
    Output: false
    
    Input: preorder = "9,#,#,1"
    Output: false
    

    思路

    使用一个很奇特的思路,类似于迭代。正常的前序序列化,每个叶子节点 x,后面肯定是2个#,所以通过拆叶子节点的方式,把每个叶子节点拆掉并用# 替换。这样不停地向root拆。如果最后能拆成一个#,说明这个序列就是前序序列

     public boolean isValidSerialization(String preorder) {
           
            String[] sp = preorder.split(",");
            Stack<String> s = new Stack<>();
            for(int i =0;i<sp.length; i++){
                s.push(sp[i]);
                int last = s.size()-1;
                while(s.size()>=3&& s.get(last).equals("#")&&s.get(last-1).equals("#")&&!s.get(last-2).equals("#")){                     s.pop();
                    s.pop();
                    s.pop();
                    s.push("#");
                    last = s.size()-1;
                }
                
            }
    
            return s.size()==1&&s.peek().equals("#");
        } 
    

    Tag

    stack

  • 相关阅读:
    代码管理模型概况
    循环链表
    队列

    链表
    java 2020-10-12T11:22:49.000+0800 字符串转换成正常时间格式
    动态数组
    mysql练习
    复杂度与LeetCode
    记一次带逗号的数字类型处理
  • 原文地址:https://www.cnblogs.com/dreamtaker/p/14605423.html
Copyright © 2011-2022 走看看