leetcode-190周赛-1457-二叉树中的回文路径

题目描述:

 

 

 

 

 提交:

class Solution:
    def pseudoPalindromicPaths (self, root: TreeNode) -> int:
        def helper(l,node):
            left,right = 0,0
            if node.left == None and node.right == None:
                dic = collections.Counter(l)
                count = 0
                for i,v in dic.items():
                    if v %2 == 1:
                        count += 1
                if count <= 1:
                    return 1
            if node.left:
                l.append(node.left.val)
                left = helper(l, node.left)
                l.pop()
            if node.right:
                l.append(node.right.val)
                right = helper(l, node.right)
                l.pop()
            
            return left + right
        
        if not root:
            return 0
        return helper([root.val],root)

优化:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def pseudoPalindromicPaths (self, root: TreeNode) -> int:
        r = [0]
        s = set()
        def toggle(elem):
            if elem in s: s.remove(elem)
            else: s.add(elem)
        def dfs(u):
            if not u: return
            toggle(u.val)
            if not u.left and not u.right and len(s) <= 1: r[0] += 1
            if u.left: dfs(u.left)
            if u.right: dfs(u.right)
            toggle(u.val)
        dfs(root)
        return r[0]

 

posted @ 2020-05-25 10:47  oldby  阅读(143)  评论(0编辑  收藏  举报