【代码随想录二刷】Day20-二叉树-C++
代码随想录二刷Day20
今日任务
654.最大二叉树
617.合并二叉树
700.二叉搜索树中的搜索
98.验证二叉搜索树
语言:C++
654. 最大二叉树
链接:https://leetcode.cn/problems/maximum-binary-tree/
前序遍历
class Solution {public://[left, right]TreeNode* construct(vector<int>& nums, int left, int right){if(right - left == 0){TreeNode* root = new TreeNode(nums[left]);return root;}int max = left;for(int i = left + 1; i <= right; i++){max = nums[max] > nums[i] ? max : i;}TreeNode* root = new TreeNode(nums[max]);if(left <= max - 1) root->left = construct(nums, left, max - 1);if(max + 1 <= right) root->right = construct(nums, max + 1, right);return root;}TreeNode* constructMaximumBinaryTree(vector<int>& nums) {return construct(nums, 0, nums.size() - 1);}
};
617. 合并二叉树
链接:https://leetcode.cn/problems/merge-two-binary-trees/
递归
class Solution {public:TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {if(root1 == NULL && root2 == NULL) return NULL;if(root1 == NULL && root2 != NULL) return root2;if(root1 != NULL && root2 == NULL) return root1;root1->val = root1->val + root2->val;root1->left = mergeTrees(root1->left, root2->left);root1->right = mergeTrees(root1->right, root2->right);return root1;}
};
迭代
class Solution {public:TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {if(root1 == NULL && root2 == NULL) return NULL;if(root1 == NULL && root2 != NULL) return root2;if(root1 != NULL && root2 == NULL) return root1;queue<TreeNode*> que;que.push(root1);que.push(root2);while(!que.empty()){TreeNode* node1 = que.front();que.pop();TreeNode* node2 = que.front();que.pop();node1->val += node2->val;if(node1->left != NULL && node2->left != NULL){que.push(node1->left);que.push(node2->left);}if(node1->right != NULL && node2->right != NULL){que.push(node1->right);que.push(node2->right);}if(node1->left == NULL && node2->left != NULL){node1->left = node2->left;}if(node1->right == NULL && node2->right != NULL){node1->right = node2->right;}//下面两种情况不需要考虑,因为相当于node1没有发生变化//node1->left != NULL && node2->left == NULL//node1->right != NULL && node2->right == NULL}return root1;}
};
700. 二叉搜索树中的搜索
链接:https://leetcode.cn/problems/search-in-a-binary-search-tree/
递归
class Solution {public:TreeNode* searchBST(TreeNode* root, int val) {if(root == NULL) return NULL;if(root->val == val) return root;if(val < root->val) return searchBST(root->left, val);if(val > root->val) return searchBST(root->right, val);return NULL;}
};
迭代
class Solution {public:TreeNode* searchBST(TreeNode* root, int val) {if(root->val == val) return root;TreeNode* cur = root;while(cur){if(cur == NULL) break;else if(val < cur->val) cur = cur->left;else if(val > cur->val) cur = cur->right;else if(val == cur->val) break;}return cur;}
};
98. 验证二叉搜索树
链接:https://leetcode.cn/problems/validate-binary-search-tree/
陷阱:不可以只验证当前子树的父子节点间是否满足二叉搜索树特性,有可能隔着几个节点发现条件不满足了
二叉搜索树按照中序遍历会得到单调递增的数组
递归
class Solution {public:vector<int> res;void traversal(TreeNode* root){if(root == NULL) return;traversal(root->left);res.push_back(root->val);traversal(root->right);}bool isValidBST(TreeNode* root) {traversal(root);for(int i = 1; i < res.size(); i++){if(res[i] <= res[i - 1]) return false;}return true;}
};
迭代
class Solution {public:vector<int> res;bool isValidBST(TreeNode* root) {stack<TreeNode*> st;st.push(root);while(!st.empty()){TreeNode* cur = st.top();if(cur != NULL){st.pop();if(cur->right) st.push(cur->right);st.push(cur);st.push(NULL);if(cur->left) st.push(cur->left);}else{st.pop();cur = st.top();st.pop();res.push_back(cur->val);}}for(int i = 1; i < res.size(); i++){if(res[i] <= res[i - 1]) return false;}return true;}
};
【代码随想录二刷】Day20-二叉树-C++相关推荐
- 【代码随想录二刷】Day21-二叉树-C++
代码随想录二刷Day21 今日任务 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236.二叉树的最近公共祖先 语言:C++ 530. 二叉搜索树的最小绝对差 链接:https://le ...
- 【代码随想录二刷】Day15-二叉树-C++
代码随想录二刷Day15 今日任务 层序遍历 226.翻转二叉树 101.对称二叉树 语言:C++ 层序遍历 102.二叉树的层序遍历 class Solution {public:vector< ...
- 【代码随想录二刷】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 ...
最新文章
- 改名 Meta,打元宇宙牌,老龄化的 Facebook 能否再换新颜
- 大咖说:出道十五载,认知五迭代
- eclispe的三个重要配置文件
- 深入理解Spark 2.1 Core (七):Standalone模式任务执行的原理与源码分析
- Php输出Xml报错:XML declaration allowed only at the start of the document
- vue-cli 将被 create-vue 替代?初始化基于 vite 的 vue3 项目为何如此简单?
- javascript 连续滚动
- docker之基础命令相关操作上
- 147. class_exists()
- 盐城哪里学计算机表格,盐城办公自动化周末班
- PHP添加网站版权信息,如何将版权和作者信息添加到用PHP创建的图像?
- 截止失真放大电路_音频放大器结构组成_音频放大器分类
- mac安静执行脚本_自动切换mac输入法-安静模式
- c语言cmp函数含义,【C艹】关于sort用法之重构cmp(comp)函数的笔记
- Windowns11并未完全抛弃IE内核,可向下兼容至IE7
- 【Jekyll】使用GitHub Pages + Jekyll搭建自己的技术博客,Jekyll服务器的搭建
- 【unity3D】单点和多点触控
- java6 官方API中文版
- Java学习笔记之基础语法(一)
- 王易见:后电商时代,家电制造业上升还是沉沦?
热门文章
- burpsuite的基本使用
- npm i安装包依赖时 gyp ERR! stack Error: Can‘t find Python executable “python“, you can set the PYTHON env
- 网页中 BarcodeReader.js 识别商品条形码
- 视频直播源码开发时关于MySQL数据库的恢复方案
- PHP语言:微信开放平台PC端扫码登录
- 关于fedora35下载速度慢的办法
- 使用宏灵活的控制代码
- 12306订票助手winform版
- buuctf-Had a bad day(文件包含)
- 关于 Java 模块系统,看这一篇就够了