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

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

 题目

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

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

解题思路

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

    代码展示

    class Solution {
        private int ans = 0;
        public int pseudoPalindromicPaths (TreeNode root) {
            Map<Integer,Integer> data = new HashMap<>();
            countPath(root, data);
            return ans;
        }
        public void countPath(TreeNode root, Map<Integer,Integer> 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));
                    }
                }
            }
        }
    }

    image.gif


    目录
    相关文章
    |
    6天前
    |
    存储 Java
    Java实现二叉树
    Java实现二叉树
    20 0
    |
    2天前
    |
    存储 Java
    JAVA中二叉树的基础与应用
    JAVA中二叉树的基础与应用
    6 1
    |
    7天前
    【力扣刷题】二叉树的中序遍历、二叉树的最大深度、翻转二叉树、对称二叉树
    【力扣刷题】二叉树的中序遍历、二叉树的最大深度、翻转二叉树、对称二叉树
    14 0
    |
    10天前
    |
    Java
    JAVA数据结构刷题 -- 二叉树进阶
    JAVA数据结构刷题 -- 二叉树进阶
    18 0
    |
    10天前
    |
    存储 Java
    JAVA数据结构刷题 -- 力扣二叉树
    JAVA数据结构刷题 -- 力扣二叉树
    16 0
    |
    11天前
    [LeetCode]—— 226——翻转二叉树
    [LeetCode]—— 226——翻转二叉树
    |
    11天前
    [LeetCode]——965——单值二叉树
    [LeetCode]——965——单值二叉树
    |
    11天前
    LeetCode——101——对称二叉树
    LeetCode——101——对称二叉树
    35 12
    |
    7天前
    |
    索引
    【力扣刷题】两数求和、移动零、相交链表、反转链表
    【力扣刷题】两数求和、移动零、相交链表、反转链表
    15 2
    【力扣刷题】两数求和、移动零、相交链表、反转链表
    |
    7天前
    |
    算法
    "刷题记录:哈希表+双指针 | leetcode-2465. 不同的平均值数目 "
    该文段是一篇关于编程题目的解答,主要讨论如何找到数组中所有不同平均值的个数。作者首先使用排序和哈希集来解决,将数组转为列表排序后,通过双指针计算平均值并存入哈希集以去重。然后,作者发现可以优化方案,通过双指针在排序后的数组中直接计算两数之和,用哈希集记录不重复的和,从而避免实际计算平均值,提高了算法效率。最终代码展示了这两种方法。
    15 0