Verify Preorder Serialization of a Binary Tree

来源:互联网 发布:知乎怎么对用户提问 编辑:程序博客网 时间:2024/05/01 10:37

原題:这里写链接内容

分析:这道题问给定一个序列化的书,判断是否是个有效的先序遍历结果,而且不允许重构树的方法。

首先,我们从叶节点开始看,对于一个叶节点,它的接下来的那两个字母一定是#,因此,在遇到两个#的时候,不妨把叶节点删掉,也就是将该叶节点变成一个#,这样当遍历一遍的时候,对于合法的树,那么一定只剩下#

public class Solution {    public boolean isValidSerialization(String preorder) {        String[] strs = preorder.split(",");        //add all char array to lists        ArrayList<Character> lists = new ArrayList<Character>();        for(String str:strs){            lists.add(str.charAt(0));        }            for(int i = 0;i<lists.size();i++){                char ch = lists.get(i);                if(ch == '#' && i == 0)                    break;                if(ch == '#' && lists.get(i-1) == '#'){                    i-=2;                    lists.remove(i);//将prevprev移除                    lists.remove(i);//将prev移除                    i--;//这里-1表示回退一格,从当前位置继续                }            }        if(lists.size()!=1)            return false;        return lists.get(0) == '#';    }}
0 0
原创粉丝点击