| 12345678910111213141516171819202122232425262728293031323334353637 | 
							- func isValidSerialization(preorder string) bool {
 
- 	tree := strings.Split(preorder, ",")
 
- 	n := len(tree)
 
- 	if n == 0 || (n == 1 && tree[0] != "#") || (tree[0] == "#" && 1 < n) {
 
- 		return false
 
- 	}
 
- 	st := []int{-1} // 0 for left, and 1 for right
 
- 	l, i, next := 1, 1, 0
 
- 	for ; i < n && l != 0; i++ {
 
- 		if next == 0 {
 
- 			st = append(st, 0)
 
- 			l++
 
- 			if tree[i] == "#" {
 
- 				next = 1
 
- 			}
 
- 		} else {
 
- 			if tree[i] == "#" {
 
- 				l--
 
- 				st = st[:l]
 
- 				for 2 < l && st[l-1] == 1 {
 
- 					l--
 
- 					if st[l-1] != 0 {
 
- 						return false
 
- 					}
 
- 					l--
 
- 					st = st[:l]
 
- 				}
 
- 			} else {
 
- 				st = append(st, 1)
 
- 				l++
 
- 				next = 0
 
- 			}
 
- 		}
 
- 	}
 
- 	return len(st) == 1 && i == n
 
- }
 
 
  |