1457. 二叉树中的伪回文路径 --力扣 --JAVA

题目

给你一棵二叉树,每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的,当它满足:路径经过的所有节点值的排列中,存在一个回文序列。

请你返回从根到叶子节点的所有路径中 伪回文 路径的数目。

解题思路

  1. 首先确定方法来判断是否为伪回文,可以通过Map来存储出现过的值,当第二次出现时删除,当Map大小小于等于1时则为伪回文;
  2. 通过递归遍历每一条从根节点到子节点的路径;
  3. 在进行左右子树遍历时需重新构建数据,避免数据干扰;

代码展示

class Solution {
    private int ans = 0;
    public int pseudoPalindromicPaths (TreeNode root) {
        Map data = new HashMap<>();
        countPath(root, data);
        return ans;
    }
    public void countPath(TreeNode root, Map data){
        if(root != null) {
            if (data.get(root.val) != null) {
                data.remove(root.val);
            } else {
                data.put(root.val, 0);
            }
            if (root.left == null && root.right == null) {
                if (data.size() == 1 || data.size() == 0) {
                    ans++;
                }
            } else {
                if(root.left != null) {
                    countPath(root.left, new HashMap<>(data));
                }
                if(root.right != null) {
                    countPath(root.right, new HashMap<>(data));
                }
            }
        }
    }
}

你可能感兴趣的:(力扣练习,算法,数据结构)