【数据结构】算法 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

原文地址:https://www.cnblogs.com/dreamtaker/p/14605423.html