leetcode 501. 二叉搜索树中的众数 思考分析
生活随笔
收集整理的這篇文章主要介紹了
leetcode 501. 二叉搜索树中的众数 思考分析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 題目
- 1、不考慮BTS性質,直接尋找眾數集合(利用map)
- 2、考慮BTS的中序遍歷結果性質
題目
給定一個有相同值的二叉搜索樹(BST),找出 BST 中的所有眾數(出現頻率最高的元素)。
假定 BST 有如下定義:
結點左子樹中所含結點的值小于等于當前結點的值
結點右子樹中所含結點的值大于等于當前結點的值
左子樹和右子樹都是二叉搜索樹
1、不考慮BTS性質,直接尋找眾數集合(利用map)
這種方法沒有考慮性質,同時消耗了額外的空間。
同時要注意,按照value值排序是沒有內置函數的,得先將map轉換為vector,然后自定義sort的規則,對pair類型數據的第二個值按照從大到小進行排序。
2、考慮BTS的中序遍歷結果性質
中序遍歷的結果是遞增的,所以我們只需要比較此結點與上結點是否相等,從而累加頻次,然后更新最大頻次,更新結果數組,保證眾數集合就行了。
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { private:int MaxCount;int count;TreeNode* pre = NULL;vector<int> result;void traversal(TreeNode* cur){if(cur == NULL ) return;traversal(cur->left);if(pre == NULL){count = 1;}else if(pre->val == cur->val){count++;}else{count = 1;}pre = cur;//如果出現次數也是最大次數,說明此元素也屬于眾數集合,應當加入結果集if(count == MaxCount) result.push_back(cur->val);//如果最大次數被更新,那么得清除舊結果if(count > MaxCount){MaxCount = count;result.clear();result.push_back(cur->val);}traversal(cur->right);return ;} public:vector<int> findMode(TreeNode* root) {MaxCount = 0;count = 0;pre = NULL;result.clear();traversal(root);return result;} };總結
以上是生活随笔為你收集整理的leetcode 501. 二叉搜索树中的众数 思考分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 530. 二叉搜索树的
- 下一篇: leetcode 236. 二叉树的最近