|  | @@ -0,0 +1,37 @@
 | 
	
		
			
				|  |  | +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
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 |