题目描述
给你一棵二叉树,每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的,当它满足:路径经过的所有节点值的排列中,存在一个回文序列。
请你返回从根到叶子节点的所有路径中 伪回文 路径的数目。
示例 1:
输入:root = [2,3,1,3,1,null,1]
输出:2
解释:上图为给定的二叉树。总共有 3 条从根到叶子的路径:红色路径 [2,3,3] ,绿色路径 [2,1,1] 和路径 [2,3,1] 。
在这些路径中,只有红色和绿色的路径是伪回文路径,因为红色路径 [2,3,3] 存在回文排列 [3,2,3] ,绿色路径 [2,1,1] 存在回文排列 [1,2,1] 。
提示:
a. 给定二叉树的节点数目在 1 到 10^5 之间。
b. 节点值在 1 到 9 之间。
分析:DFS + 回溯法
class Solution(object):
def pseudoPalindromicPaths (self, root):
"""
:type root: TreeNode
:rtype: int
"""
road = dict()
self.res = 0
if not root:
return 0
def dfs(root,road):
if not root:
return
road[root.val] = road.get(root.val, 0) + 1
#到达叶子节点
if not root.left and not root.right:
self.res += self.check(road)
dfs(root.left,road)
dfs(root.right,road)
road[root.val] -= 1
#选择,路径
dfs(root,road)
return self.res
def check(self,dict):
odd = 0
for key,val in dict.items():
if val % 2 == 0 :
continue
else:
if odd == 0 :
odd += 1
else:
return 0
return 1