边工作边刷题:70天一遍leetcode: day 49
Verify Preorder Serialization of a Binary Tree
要点:第一遍就做出来了,invalid的只有2种情况:一是在某个结点时(包括null)发现没有字符了,二是当遍历完在最外层,发现还有字符没用
错误点:
- 因为index是到最后一个元素中止的,所以情况2的过界条件为!=len-1
- 7/12/16: nested function + outer variable: 如果function内有assignment,则变成一个新的variable,所以这里只能用class attribute
class Solution(object):
def isValidSerialization(self, preorder):
"""
:type preorder: str
:rtype: bool
"""
def dfs(preorder):
if self.idx>=len(preorder):
return False
if preorder[self.idx]=='#':
return True
self.idx+=1
if not dfs(preorder):
return False
self.idx+=1
if not dfs(preorder):
return False
return True
self.idx = 0
preorder = preorder.split(",")
if not dfs(preorder):
return False
if self.idx!=len(preorder)-1:
return False
return True