###### tags: `LeetCode` `BST` `Easy` # LeetCode #501 [Find Mode in Binary Search Tree](https://leetcode.com/problems/find-mode-in-binary-search-tree/) ### (Easy) 給定一個有相同值的二叉搜索樹(BST),找出 BST 中的所有眾數(出現頻率最高的元素)。 假定 BST 有如下定義: * 結點左子樹中所含結點的值小於等於當前結點的值 * 結點右子樹中所含結點的值大於等於當前結點的值 * 左子樹和右子樹都是二叉搜索樹 --- 由於BST用中序遍歷會得到一排列好的數組, 因此可用一變數紀錄最大出現次數, 一變數紀錄當前出現次數, 一變數紀錄前值。 當節點值等於前值時, cur=cur+1, 反之cur歸零, 並將前值設為節點值。 當當前出現次數大於最大出現次數時, 將答案數組清空並存入節點值, 再更新最大出現次數為當前出現次數。 --- ``` /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: int maxv=0, cur=0, prev=INT_MIN; vector<int> ans; vector<int> findMode(TreeNode* root) { helper(root); return ans; } void helper(TreeNode* node){ if(!node)return; helper(node->left); if(prev==node->val)cur++; else{ cur=1; prev=node->val; } if(cur==maxv)ans.push_back(node->val); if(cur>maxv){ ans.clear(); ans.push_back(node->val); maxv=cur; } helper(node->right); } }; ```