码迷,mamicode.com
首页 > 其他好文 > 详细

331. Verify Preorder Serialization of a Binary Tree

时间:2019-11-09 09:18:11      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:put   OLE   技术   strong   new   orm   present   split   rsa   

One way to serialize a binary tree is to use pre-order traversal. When we encounter a non-null node, we record the node‘s value. If it is a null node, we record using a sentinel value such as #.

     _9_
    /      3     2
  / \   /  4   1  #  6
/ \ / \   / # # # #   # #

For example, the above binary tree can be serialized to the string "9,3,4,#,#,1,#,#,2,#,6,#,#", where # represents a null node.

Given a string of comma separated values, verify whether it is a correct preorder traversal serialization of a binary tree. Find an algorithm without reconstructing the tree.

Each comma separated value in the string must be either an integer or a character ‘#‘ representing null pointer.

You may assume that the input format is always valid, for example it could never contain two consecutive commas such as "1,,3".

Example 1:

Input: "9,3,4,#,#,1,#,#,2,#,6,#,#"
Output: true

Example 2:

Input: "1,#"
Output: false

Example 3:

Input: "9,#,#,1"
Output: false


    public static boolean isValidSerialization(String preorder) {
        Stack<String> st = new Stack<>();
        String[] strs = preorder.split(",");
        for (int pos = 0; pos < strs.length; pos++) {
            String curr = strs[pos];
            while (curr.equals("#") && !st.isEmpty() && st.peek().equals(curr)) {
                st.pop();
                if (st.isEmpty()) {
                    return false;
                }
                st.pop();
            }
            st.push(curr);
            System.out.println(pos + "--->" + st.toString());
        }
        return st.size() == 1 && st.peek().equals("#");
    }

 

 

技术图片

 

技术图片

 

 

开始还不太明白,后来画个图就明白了。

遇到数字就push作为root,

遇到第一个#说明是个空,先push,

遇到第二个#说明不会继续往下走了,连续pop这两个#叶子,最后再把根pop出去用#作为新的根,表示这个根已经遍历完了。

等右子树全部遍历完,stack应该只剩下最顶的根和两个#叶子,继续用上面的方法pop掉#和根,再把#push进来,最后stack判断是不是#然后结束。

 

331. Verify Preorder Serialization of a Binary Tree

标签:put   OLE   技术   strong   new   orm   present   split   rsa   

原文地址:https://www.cnblogs.com/wentiliangkaihua/p/11824055.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!