【代码随想录二刷】Day21-二叉树-C++
代码随想录二刷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++相关推荐
- 【代码随想录二刷】Day15-二叉树-C++
代码随想录二刷Day15 今日任务 层序遍历 226.翻转二叉树 101.对称二叉树 语言:C++ 层序遍历 102.二叉树的层序遍历 class Solution {public:vector< ...
- 【代码随想录二刷】Day20-二叉树-C++
代码随想录二刷Day20 今日任务 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树 语言:C++ 654. 最大二叉树 链接:https://leetcode ...
- 【代码随想录二刷】Day23-二叉树-C++
代码随想录二刷Day23 今日任务 669.修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树 语言:C++ 669. 修剪二叉搜索树 链接:https://leet ...
- 代码随想录二刷——动规篇章
dp 动态规划篇 dp篇二刷复习 路径种数问题 63.不同路径 II 拆分问题 343. 整数拆分 96.不同的二叉搜索树 背包问题 0-1背包,最多选一个,选or不选 406.分割等和子集 1049 ...
- 【代码随想录二刷】day9 | 28. 实现 strStr() 459.重复的子字符串
二刷主要记录理解不一样的题 一刷地址:day9 今日题目:中等 KMP:困难 => 第一时间想到了使用KMP,但是不太会,只有用常规方法完成 实现 strStr():拼接完两个字符串s之后,取其 ...
- 【代码随想录二刷】day 25 | 216.组合总和III 17.电话号码的字母组合
二刷主要记录理解不一样的题 一刷地址:day25 今日题目:中等 组合总和III :注意剪枝操作:①sum>n:②path.size()>k class Solution {LinkedL ...
- <代码随想录二刷>链表
文章目录 203. 移除链表元素 题目描述 思路分析 参考代码 206. 反转链表 题目描述 思路分析 参考代码 24. 两两交换链表中的节点 题目描述 思路分析 参考代码 19. 删除链表的倒数第 ...
- 随想录二刷Day15——二叉树
文章目录 二叉树 2. 递归遍历二叉树 3. 二叉树的迭代遍历 4. 二叉树的统一迭代法 二叉树 2. 递归遍历二叉树 144. 二叉树的前序遍历 class Solution {public:vec ...
- 代码随想录二刷链表篇
链表 2.移除链表元素 ● 如果head为空就返回head,定义虚拟头节点,pre节点,cur节点.当cur 不等于null时. ● 如果当前节点的值等于val,pre.next = cur.next ...
最新文章
- error LNK2001: unresolved external symbol _main
- leetcode - Populating Next Right Pointers in Each Node II
- ASP.NET MVC 视图
- JBoss Fuse:使用JEXL的动态蓝图文件
- django+nginx+uwsgi部署web站点
- 每周分享之cookie详解
- memset()、memcpy()、memcmp()的使用方法
- 【HTML/CSS】SEO的概念和实现
- Web应用进行XSS漏洞测试
- 日本程序开发式自定义的malloc/free函数(一)-外部式样书(外部仕様書)
- 【C++入门】C++ 输入输出和文件操作
- Apache访问localhost页面403Forbidden
- android-gradle-plugin3.0.1源码分析
- Java web实习报告
- 传统io和NIO详细比较
- ae中合成设置的快捷键_Adobe AE快捷键大全
- Linux之磁盘与文件系统管理
- React-Native: bios打开VT-x选项
- session error的问题
- python 编程该看那些书籍_python编程入门书籍-零基础学习Python编程,这8本书必看!...
热门文章
- 第1周学习:深度学习和pytorch基础
- 查看浏览器响应头信息数据
- 书读百遍其义自见 - 六大原则 23种设计模式
- 基于MVC的简易留言板
- 基于Python实现的医疗知识图谱的知识问答系统
- 储存profiles是什么意思_【2018最新】low profile的中文是什么意思-精选word文档 (4页)...
- 定义自己的地图——使用mapabc api
- LDAP+LAM搭建
- 4g上网卡托 linux,openwrt/LEDE通过USB连接4G网卡或者手机移动网络共享上网(RNDIS)...
- P3799 妖梦拼木棒【暴力枚举、组合数】