1457. Pseudo-Palindromic Paths in a Binary Tree

Difficulty:
Related Topics:
Similar Questions:

    Problem

    Given a binary tree where node values are digits from 1 to 9. A path in the binary tree is said to be pseudo-palindromic if at least one permutation of the node values in the path is a palindrome.

    **Return the number of *pseudo-palindromic* paths going from the root node to leaf nodes.**

      Example 1:

    Input: root = [2,3,1,3,1,null,1]
    Output: 2 
    Explanation: The figure above represents the given binary tree. There are three paths going from the root node to leaf nodes: the red path [2,3,3], the green path [2,1,1], and the path [2,3,1]. Among these paths only red path and green path are pseudo-palindromic paths since the red path [2,3,3] can be rearranged in [3,2,3] (palindrome) and the green path [2,1,1] can be rearranged in [1,2,1] (palindrome).
    

    Example 2:

    Input: root = [2,1,1,1,3,null,null,null,null,null,1]
    Output: 1 
    Explanation: The figure above represents the given binary tree. There are three paths going from the root node to leaf nodes: the green path [2,1,1], the path [2,1,3,1], and the path [2,1]. Among these paths only the green path is pseudo-palindromic since [2,1,1] can be rearranged in [1,2,1] (palindrome).
    

    Example 3:

    Input: root = [9]
    Output: 1
    

      Constraints:

    Solution

    /**
     * Definition for a binary tree node.
     * function TreeNode(val, left, right) {
     *     this.val = (val===undefined ? 0 : val)
     *     this.left = (left===undefined ? null : left)
     *     this.right = (right===undefined ? null : right)
     * }
     */
    /**
     * @param {TreeNode} root
     * @return {number}
     */
    var pseudoPalindromicPaths  = function(root) {
        return dfs(root, Array(10).fill(0), 0);
    };
    
    var dfs = function(node, map, numOfOdd) {
        if (!node) return 0;
        if (map[node.val] % 2) {
            numOfOdd -= 1;
        } else {
            numOfOdd += 1;
        }
        if (!node.left && !node.right) {
            return numOfOdd <= 1 ? 1 : 0;
        }
        map[node.val] += 1;
        var res = dfs(node.left, map, numOfOdd)
            + dfs(node.right, map, numOfOdd);
        map[node.val] -= 1;
        return res;
    };
    

    Explain:

    nope.

    Complexity: