边工作边刷题: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
        

原文地址:https://www.cnblogs.com/absolute/p/5690311.html