leetcode 501. 二叉搜索樹中的眾數 思考分析

目錄

    • 題目
    • 1、不考慮BTS性質,直接尋找眾數集合(利用map)
    • 2、考慮BTS的中序遍歷結果性質

題目

給定一個有相同值的二叉搜索樹(BST),找出 BST 中的所有眾數(出現頻率最高的元素)。
假定 BST 有如下定義:
結點左子樹中所含結點的值小于等于當前結點的值
結點右子樹中所含結點的值大于等于當前結點的值
左子樹和右子樹都是二叉搜索樹
在這里插入圖片描述

1、不考慮BTS性質,直接尋找眾數集合(利用map)

這種方法沒有考慮性質,同時消耗了額外的空間。
同時要注意,按照value值排序是沒有內置函數的,得先將map轉換為vector,然后自定義sort的規則,對pair類型數據的第二個值按照從大到小進行排序。

/*** 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:void traversal(TreeNode* cur,unordered_map<int,int>& map){if(cur == NULL ) return ;//以結點值為key,結點值出現的頻次為map值map[cur->val]++;traversal(cur->left,map);traversal(cur->right,map);return ;}//定義sort排序的規則,以二維數組的第二維從大到小排序bool static cmp(const pair<int,int>& a,const pair<int,int>& b){if(a.second>b.second) return 1;else return 0;}
public:vector<int> findMode(TreeNode* root) {unordered_map<int,int> map;vector<int> result;if(root == NULL) return result;traversal(root,map);//將map轉化為vector(二維數組),以便于下一步的排序vector<pair<int,int>> vec(map.begin(),map.end());sort(vec.begin(),vec.end(),cmp);//vec第一個元素是頻次最高的,然后繼續尋找與之頻次一樣的元素for(int i=0;i<vec.size();i++){if(vec[i].second == vec[0].second) result.push_back(vec[i].first);else break;}return result;}
};

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;}
};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377922.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377922.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377922.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

二、模型評估方法

IDE為Jupyter Notebook scikit-learn官網 scikit-learn是一個專門用于機器學習的工具包 運用到啥函數不知道咋使用&#xff1f;戳它–>scikit-learn工具包的API文檔 不知道用啥模板&#xff1f;戳它–>scikit-learn樣例模型 功能翻譯Classification分類Regression回歸Cl…

union

關鍵字 1. 共用體聲明和共用體變量定義共用體(參考“共用體”百科詞條)是一種特殊形式的變量&#xff0c;使用關鍵字union來定義共用體(有些人也叫"聯合")聲明和共用體變量定義與結構體十分相似。其形式為:union 共用體名{數據類型 成員名;數據類型 成員名;...} 變量…

SEL

Object-C 中的Selector 概念 Andrew Huang <bluedrum163.com> 轉載請注明作者和聯絡方式 在iphone程序中會大量看到selector這樣的用法。<<iphone開發基礎>花了很大一個篇幅來解析這個語法&#xff0c;但是不知 是翻譯問題&#xff0c;還是解釋過細&#xff0c…

Java Calendar add()方法與示例

日歷類的add()方法 (Calendar Class add() method) add() method is available in java.util package. add()方法在java.util包中可用。 add() method is used to perform add or subtract the given amount of time to the given cal_fi (calendar field). add()方法用于對指定…

三、線性回歸實驗分析

所有代碼塊都是在Jupyter Notebook下進行調試運行&#xff0c;前后之間都相互關聯。 文中所有代碼塊所涉及到的函數里面的詳細參數均可通過scikit-learn官網API文檔進行查閱&#xff0c;這里我只寫下每行代碼所實現的功能&#xff0c;參數的調整讀者可以多進行試驗調試。多動手…

leetcode 236. 二叉樹的最近公共祖先 思考分析

目錄題目思考分析改進本文章代碼思路來源于公眾號【代碼隨想錄】題目 給定一個二叉樹, 找到該樹中兩個指定節點的最近公共祖先。 百度百科中最近公共祖先的定義為&#xff1a;“對于有根樹 T 的兩個結點 p、q&#xff0c;最近公共祖先表示為一個結點 x&#xff0c;滿足 x 是 p、…

輕輕松松給PCB板添加LOGO

在 PCB 圖中放置漢字或圖形的方法&#xff1a;A、文字——> 圖片——> PCB 圖——> 復制到自己作品中B、圖片——> PCB 圖——> 復制到自己作品中1、首先準備好“BMP”格式的圖片&#xff0c;在圖片中依靠顏色分辨圖層&#xff0c;所以最好準備“單色黑白”圖。…

java bitset_Java BitSet clone()方法及示例

java bitsetBitSet類clone()方法 (BitSet Class clone() method) clone() method is available in java.util package. clone()方法在java.util包中可用。 clone() method is used to clone this Bitset or in other words, this method is used to create a Bitset that is si…

小技巧

//屏蔽下拉框的某一個選項 <disabled"disable">... 1 <html>2 <body>3 4 <select>5 <option>Volvo</option>6 <option>Saab</option>7 <option disabled"disabled">Mercedes</option>…

jquery中text val html attr的差別

html和innerHTMl是一樣的&#xff0c;可以獲得和設置html標簽文本如&#xff1a;設置值&#xff1a;$("p").html("<span stylefont-size:13px;color:red>HTML標簽文本</span>"); 獲得值&#xff1a;$("p").html(); text和innerText是…

leetcode 235. 二叉搜索樹的最近公共祖先 思考分析

目錄題目思考迭代法題目 給定一個二叉搜索樹, 找到該樹中兩個指定節點的最近公共祖先。 百度百科中最近公共祖先的定義為&#xff1a;“對于有根樹 T 的兩個結點 p、q&#xff0c;最近公共祖先表示為一個結點 x&#xff0c;滿足 x 是 p、q 的祖先且 x 的深度盡可能大&#xff0…

四、邏輯回歸

邏輯回歸logistic_regression(LR)其實是分類算法&#xff0c;而不是回歸算法。 回歸算法得到的是一個數&#xff0c;分類算法得到的是幾個不同的類別。 邏輯回歸就是通過函數將值轉換為0-1之間&#xff0c;形成概率問題&#xff0c;從而實現了不同類別的分類。 Sigmoid 函數 …

db,dbms,dba_DBMS中的數據庫管理員(DBA)

db,dbms,dba數據庫管理員(DBA) (Database Administrator (DBA)) To use the Database Management System, it is necessary to have central control over data and programs together in order to access such data. A person who has central control over such system is re…

運算符優先級

轉載于:https://www.cnblogs.com/c-cloud/p/3280911.html

五、邏輯回歸實驗分析

所有代碼塊都是在Jupyter Notebook下進行調試運行&#xff0c;前后之間都相互關聯。 文中所有代碼塊所涉及到的函數里面的詳細參數均可通過scikit-learn官網API文檔進行查閱&#xff0c;這里我只寫下每行代碼所實現的功能&#xff0c;參數的調整讀者可以多進行試驗調試。多動手…

二叉搜索樹的插入、刪除、修剪、構造操作(leetcode701、450、669、108)

目錄1、leetcode 701. 二叉搜索樹中的插入操作1、題目2、遞歸法3、迭代法2、leetcode 450. 二叉搜索樹中的插入操作1、題目2、思路遞歸法3、迭代法4、刪除結點的兩個方法以及注意點3、leetcode 669. 修剪二叉搜索樹1、題目2、思考與遞歸3、迭代法4、leetcode 108. 將有序數組轉…

Memcached查看和清理

1.一種telnet localhost 11211 #登陸stats #查看狀態flush_all #清理quit #退出2.又學到一個:echo flush_all | nc localhost 112113.1、數據存儲(假設key為test,value為12345) printf "set test 0 1 5\r\n12345\r\n" | nc localhost 11211STORED2.數據取回(假設key為…

模擬退火算法解決np_P和NP問題與解決方案| 演算法

模擬退火算法解決npP問題 (P Problems) P is the set of all the decision problems solvable by deterministic algorithms in polynomial time. P是多項式時間內確定性算法可解決的所有決策問題的集合。 NP問題 (NP Problems) NP is the set of all the decision problems t…

POJ2251Dungeon Master

http://poj.org/problem?id2251 題意 &#xff1a; 就是迷宮升級版&#xff0c;從以前的一個矩陣也就是一層&#xff0c;變為現在的L層&#xff0c;" . "是可以走&#xff0c;但是“#”不可以走&#xff0c;從S走到E&#xff0c;求最短的路徑&#xff0c;若是找不到…

六、聚類算法

一、聚類概念 1&#xff0c;通俗易懂而言&#xff0c;聚類主要運用于無監督學習中&#xff0c;也就是將沒有標簽的東西如何分為幾堆兒。 2&#xff0c;無監督學習即沒有標簽&#xff0c;不知道這些玩意到底是啥。當然&#xff0c;有監督學習就是由標簽&#xff0c;我們是提前知…