代码随想录二刷Day21

今日任务

530.二叉搜索树的最小绝对差
501.二叉搜索树中的众数
236.二叉树的最近公共祖先
语言:C++

530. 二叉搜索树的最小绝对差

链接:https://leetcode.cn/problems/minimum-absolute-difference-in-bst/
递归

class Solution {public:vector<int> res;void traversal(TreeNode* cur){if(cur == NULL) return;traversal(cur->left);res.push_back(cur->val);traversal(cur->right);}int getMinimumDifference(TreeNode* root) {traversal(root);int min = INT_MAX;for(int i = 1; i < res.size(); i++){min = min < res[i] - res[i - 1] ? min : res[i] - res[i - 1];}return min;}
};

迭代(非双指针)

class Solution {public:vector<int> res;int getMinimumDifference(TreeNode* root) {stack<TreeNode*> st;TreeNode* cur = root;while(cur != NULL || !st.empty()){if(cur != NULL){st.push(cur);cur = cur->left;}else{cur = st.top();st.pop();res.push_back(cur->val);cur = cur->right;}}int min = INT_MAX;for(int i = 1; i < res.size(); i++){min = min < res[i] - res[i - 1] ? min : res[i] - res[i - 1];}return min;}
};

迭代(双指针)

class Solution {public:int res = INT_MAX;int getMinimumDifference(TreeNode* root) {stack<TreeNode*> st;TreeNode* cur = root;TreeNode* pre = NULL;while(cur != NULL || !st.empty()){if(cur != NULL){st.push(cur);cur = cur->left; //左}else{cur = st.top();st.pop();if(pre) res = min(res, cur->val - pre->val); //中pre = cur;cur = cur->right; //右}}return res;}
};

501. 二叉搜索树中的众数

链接:https://leetcode.cn/problems/find-mode-in-binary-search-tree/
普通二叉树就用哈希表,然后按照出现次数从大到小排序
递归

class Solution {public:vector<int> res;int curCount = 1;int maxCount = INT_MIN;TreeNode* pre = NULL;void traversal(TreeNode* cur){if(cur == NULL) return;traversal(cur->left);if(pre && pre->val == cur->val) curCount++;else curCount = 1;pre = cur;if(curCount == maxCount) res.push_back(cur->val);else if(curCount > maxCount){res.clear();maxCount = curCount;res.push_back(cur->val);}traversal(cur->right);}vector<int> findMode(TreeNode* root) {TreeNode* cur = root;traversal(cur);return res;}
};

迭代

class Solution {public:int maxCount = INT_MIN;int curCount = 1;vector<int> res;vector<int> findMode(TreeNode* root) {if(root->left == NULL && root->right == NULL){res.push_back(root->val);return res;}TreeNode* cur = root;TreeNode* pre = NULL;stack<TreeNode*> st;while(!st.empty() || cur != NULL){// if(pre) cout << pre->val << " ";// else cout << "pre=NULL" << " ";// if(cur) cout << cur->val << endl;// else cout << "cur=NULL" << endl;if(cur != NULL){st.push(cur);cur = cur->left;}else{cur = st.top();st.pop();if(pre && pre->val == cur->val) curCount++;else curCount = 1;if(maxCount == curCount) res.push_back(cur->val);else if(maxCount < curCount){maxCount = curCount;res.clear();res.push_back(cur->val);}pre = cur;cur = cur->right;}}return res;}
};

236. 二叉树的最近公共祖先

链接:https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/

class Solution {public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if(root == p || root == q || root == NULL) return root;TreeNode* left = lowestCommonAncestor(root->left, p, q); //leftTreeNode* right = lowestCommonAncestor(root->right, p, q); //rightif(left != NULL && right != NULL) return root; //rootif(left == NULL && right != NULL) return right;return left;}
};

【代码随想录二刷】Day21-二叉树-C++相关推荐

  1. 【代码随想录二刷】Day15-二叉树-C++

    代码随想录二刷Day15 今日任务 层序遍历 226.翻转二叉树 101.对称二叉树 语言:C++ 层序遍历 102.二叉树的层序遍历 class Solution {public:vector< ...

  2. 【代码随想录二刷】Day20-二叉树-C++

    代码随想录二刷Day20 今日任务 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树 语言:C++ 654. 最大二叉树 链接:https://leetcode ...

  3. 【代码随想录二刷】Day23-二叉树-C++

    代码随想录二刷Day23 今日任务 669.修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树 语言:C++ 669. 修剪二叉搜索树 链接:https://leet ...

  4. 代码随想录二刷——动规篇章

    dp 动态规划篇 dp篇二刷复习 路径种数问题 63.不同路径 II 拆分问题 343. 整数拆分 96.不同的二叉搜索树 背包问题 0-1背包,最多选一个,选or不选 406.分割等和子集 1049 ...

  5. 【代码随想录二刷】day9 | 28. 实现 strStr() 459.重复的子字符串

    二刷主要记录理解不一样的题 一刷地址:day9 今日题目:中等 KMP:困难 => 第一时间想到了使用KMP,但是不太会,只有用常规方法完成 实现 strStr():拼接完两个字符串s之后,取其 ...

  6. 【代码随想录二刷】day 25 | 216.组合总和III 17.电话号码的字母组合

    二刷主要记录理解不一样的题 一刷地址:day25 今日题目:中等 组合总和III :注意剪枝操作:①sum>n:②path.size()>k class Solution {LinkedL ...

  7. <代码随想录二刷>链表

    文章目录 203. 移除链表元素 题目描述 思路分析 参考代码 206. 反转链表 题目描述 思路分析 参考代码 24. 两两交换链表中的节点 题目描述 思路分析 参考代码 19. 删除链表的倒数第 ...

  8. 随想录二刷Day15——二叉树

    文章目录 二叉树 2. 递归遍历二叉树 3. 二叉树的迭代遍历 4. 二叉树的统一迭代法 二叉树 2. 递归遍历二叉树 144. 二叉树的前序遍历 class Solution {public:vec ...

  9. 代码随想录二刷链表篇

    链表 2.移除链表元素 ● 如果head为空就返回head,定义虚拟头节点,pre节点,cur节点.当cur 不等于null时. ● 如果当前节点的值等于val,pre.next = cur.next ...

最新文章

  1. error LNK2001: unresolved external symbol _main
  2. leetcode - Populating Next Right Pointers in Each Node II
  3. ASP.NET MVC 视图
  4. JBoss Fuse:使用JEXL的动态蓝图文件
  5. django+nginx+uwsgi部署web站点
  6. 每周分享之cookie详解
  7. memset()、memcpy()、memcmp()的使用方法
  8. 【HTML/CSS】SEO的概念和实现
  9. Web应用进行XSS漏洞测试
  10. 日本程序开发式自定义的malloc/free函数(一)-外部式样书(外部仕様書)
  11. 【C++入门】C++ 输入输出和文件操作
  12. Apache访问localhost页面403Forbidden
  13. android-gradle-plugin3.0.1源码分析
  14. Java web实习报告
  15. 传统io和NIO详细比较
  16. ae中合成设置的快捷键_Adobe AE快捷键大全
  17. Linux之磁盘与文件系统管理
  18. React-Native: bios打开VT-x选项
  19. session error的问题
  20. python 编程该看那些书籍_python编程入门书籍-零基础学习Python编程,这8本书必看!...

热门文章

  1. 第1周学习:深度学习和pytorch基础
  2. 查看浏览器响应头信息数据
  3. 书读百遍其义自见 - 六大原则 23种设计模式
  4. 基于MVC的简易留言板
  5. 基于Python实现的医疗知识图谱的知识问答系统
  6. 储存profiles是什么意思_【2018最新】low profile的中文是什么意思-精选word文档 (4页)...
  7. 定义自己的地图——使用mapabc api
  8. LDAP+LAM搭建
  9. 4g上网卡托 linux,openwrt/LEDE通过USB连接4G网卡或者手机移动网络共享上网(RNDIS)...
  10. P3799 妖梦拼木棒【暴力枚举、组合数】