leetcode 331 :Verify Preorder Serialization of a Binary Tree:简单题

来源:互联网 发布:javascript倒计时脚本 编辑:程序博客网 时间:2024/06/05 06:34

331. Verify Preorder Serialization of a Binary Tree

My Submissions
Total Accepted: 6543 Total Submissions: 20906 Difficulty: Medium

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 '#' representingnull 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:
"9,3,4,#,#,1,#,#,2,#,6,#,#"
Return true

Example 2:
"1,#"
Return false

Example 3:
"9,#,#,1"
Return false

这道题目是只是判断pre-order遍历序列的正确性,直观想法:非叶子结点--栈压入两个节点;叶子结点--不做操作;中途无节点可压或者遍历完仍有节点返回false,不然返回true;

public class Solution {    public boolean isValidSerialization(String preorder) {if(preorder==null||preorder.length()==0)return false;Stack<Character> st=new Stack<>();String[] split=preorder.split(",");st.push(split[0].charAt(0));int Index=1;while(!st.isEmpty()){Character cc=st.pop();if(cc!='#'){if(Index<split.length)st.push(split[Index++].charAt(0));else {return false;}if(Index<split.length)st.push(split[Index++].charAt(0));else {return false;}}}return Index==split.length;}}
其实,只是判断节点的位置和数量是否有误,因此不需要栈,也可以操作。

非叶子结点,入度是1,出度是2

叶子节点,入度是1,出度是0

所以计算diff表示总的(入度-出度),初始化1

主要过程中,出现diff<0表示出错,结束后diff==0才可以

public boolean isValidSerialization(String preorder) {    String[] nodes = preorder.split(",");    int diff = 1;    for (String node: nodes) {        if (--diff < 0) return false;        if (!node.equals("#")) diff += 2;    }    return diff == 0;}










0 0
原创粉丝点击