1. 中序遍历+辅助数组
中序遍历获得有相同值的BST的非严格递增序列,存入辅助数组中,然后统计众数。
时间O(n)
,空间O(n)
。
2. 中序遍历
在中序遍历的过程中,可以直接记录和统计当前数据的出现次数,跟之前出现过的最大次数比较即可,不需要辅助数组。
时间O(n)
,空间O(n)
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| class Solution { public: vector<int> findMode(TreeNode* root) { if (root == nullptr) return {}; vector<int> ans; stack<TreeNode*> st; int maxMode, maxCount = 0; int cur, curCount = 0;
while (root != nullptr || !st.empty()) { if (root == nullptr) { root = st.top(); st.pop(); if (cur == root->val) curCount++; else { cur = root->val; curCount = 1; } if (curCount == maxCount) ans.push_back(cur); else if (curCount > maxCount) { maxCount = curCount; if (maxMode != cur) { maxMode = cur; ans.clear(); ans.push_back(maxMode); } } root = root->right; } else { st.push(root); root = root->left; } }
return ans; } };
|