15 Jun 2024C++ / Python / TypeScriptEasy

Find Mode in Binary Search Tree

Collected C++, Python, TypeScript solutions for find mode in binary search tree. Add a dedicated write-up later if you want deeper notes.

auto-generated entry for Find Mode in Binary Search Tree. the solution files are available below.

solution files

  • C++ find-mode-in-binary-search-tree/synced-solution.cpp
  • Python find-mode-in-binary-search-tree/synced-solution.py
  • TypeScript find-mode-in-binary-search-tree/synced-solution.ts

Solution files

Pythonfind-mode-in-binary-search-tree/synced-solution.py
class Solution:
    def findMode(self, root: Optional[TreeNode]) -> List[int]:
        counts = {}

        def dfs(node):
            if not node:
                return
            counts[node.val] = counts.get(node.val, class="syntax-number">0) + class="syntax-number">1
            dfs(node.left)
            dfs(node.right)

        dfs(root)
        max_count = max(counts.values())
        return [value for value, count in counts.items() if count == max_count]
C++find-mode-in-binary-search-tree/synced-solution.cpp
class Solution {
public:
    vector<int> findMode(TreeNode* root) {
        unordered_map<int, int> counts;
        dfs(root, counts);

        int maxCount = class="syntax-number">0;
        for (const auto& [value, count] : counts) {
            maxCount = max(maxCount, count);
        }

        vector<int> result;
        for (const auto& [value, count] : counts) {
            if (count == maxCount) {
                result.push_back(value);
            }
        }
        return result;
    }

private:
    void dfs(TreeNode* node, unordered_map<int, int>& counts) {
        if (!node) {
            return;
        }
        counts[node->val]++;
        dfs(node->left, counts);
        dfs(node->right, counts);
    }
};
TypeScriptfind-mode-in-binary-search-tree/synced-solution.ts
function findMode(root: TreeNode | null): number[] {
    const counts = new Map<number, number>();

    const dfs = (node: TreeNode | null): void => {
        if (!node) {
            return;
        }
        counts.set(node.val, (counts.get(node.val) ?? class="syntax-number">0) + class="syntax-number">1);
        dfs(node.left);
        dfs(node.right);
    };

    dfs(root);
    let maxCount = class="syntax-number">0;
    for (const count of counts.values()) {
        maxCount = Math.max(maxCount, count);
    }

    const result: number[] = [];
    for (const [value, count] of counts.entries()) {
        if (count === maxCount) {
            result.push(value);
        }
    }
    return result;
}