not as smart as the in-out degree solution, but easy to come up from tree traversal algorithm.

```
public boolean isValidSerialization(String preorder) {
if (preorder.length() == 0) return true;
String[] tokens = preorder.split(",");
return next(tokens, 0) == tokens.length;
}
public int next(String[] preorder, int start) {
if (start >= preorder.length) return -1;
String root = preorder[start++];
if (root.equals("#")) return start;
if (start >= preorder.length) return -1;
int leftEnd = next(preorder, start);
if (leftEnd == -1) return -1;
return next(preorder, leftEnd);
}
```