树
文章平均质量分 53
三二一一二三
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
28.235.二叉搜索树的最近公共祖先
class Solution {//递归版public:if (root->val>p->val && root->val>q->val) {//往左去return l;else if (root->val<p->val && root->val<q->val) {//往左去return r;//如果在区间中间,遇到的第一个节点就是最近公共祖先class Solution {//迭代版public://找得到//找不到。原创 2025-02-23 01:25:27 · 323 阅读 · 0 评论 -
26.236.二叉树的最近公共祖先
class Solution {//递归基础版public://终止条件:为p或为q,说明找到了p或q,为空,说明没找到,没区别//左//右//中。找到了左右的话if (l!//左右都不空,说明它就是//如果左为空右不为空,说明在右else if (l!//左不空右空,说明在左//都为空,说明没有class Solution {//递归精简版public://终止条件:为p或为q,说明找到了p或q,为空,说明没找到,没区别//左//右//中。找到了左右的话。原创 2025-02-23 00:40:40 · 151 阅读 · 0 评论 -
25.501.二叉搜索树中的众数
class Solution {//二叉搜索递归版public:int cnt=0;int mcnt=0;//左//中//是第一个节点,或者与前一个节点值不同else cnt++;//与前一个节点值相同pre=cur;//更新前一个节点//维护结果集if (cnt>mcnt) {//更新结果集mcnt=cnt;//清空后更新//右return;return res;class Solution {//普通二叉递归版public:return;原创 2025-02-22 16:23:00 · 247 阅读 · 0 评论 -
24.530.二叉搜索树的最小绝对差
class Solution {//递归版public://左if (pre!pre=root;//右return;return m;class Solution {//转为数组public://转为有序数组//先到左//中//右return;class Solution {//迭代版public:while (cur!st.empty()) {//中序遍历if (cur!原创 2025-02-22 14:10:14 · 174 阅读 · 0 评论 -
23.98.验证二叉搜索树
class Solution {//递归前一个节点版public://递归每层都会做。所以选择全局记录。取前一个节点即左结点//左//中if (pre!pre = root;//让它无论如何都能更新前一个节点。因为它是没有条件的,不需要条件的//右初始化最小值版:class Solution {//初始化最小值版public://样例里有2147483647//左//中.验证它是个递增的序列。即中必须大于左,右必须大于中//右。原创 2025-02-22 11:59:27 · 477 阅读 · 0 评论 -
22.700.二叉搜索树中的搜索
题解也是这个问题。感觉加上就对了。不加也应该是对的。应该就是为了leetcode编译通过class Solution {//递归基础版public://设一个来接住返回值//左//右return res;class Solution {//递归精简版public://应该只是为了通过编译。原创 2025-02-22 02:18:33 · 469 阅读 · 0 评论 -
21.617.合并二叉树
que.pop();//中//左右,四种情况。原创 2025-02-17 20:23:35 · 433 阅读 · 0 评论 -
19.654. 最大二叉树
一遍过,比上一道简单。public://终止条件。左闭右开相等时为空节点//中//构造节点,只需要维护最大值即可int idx=0;i<rig;idx=i;//左[lft,m),m,[m+1,rig)//右。原创 2025-02-14 01:32:33 · 218 阅读 · 0 评论 -
18.2.105从前序与中序遍历序列构造二叉树
public://左闭右开相等//中//取出前序的节点为根节点//以根节点找中序的分割点int idx=0;idx<inEnd;idx++) {//左闭右开,就是最基本的for循环的逻辑//用分割点分割中序//用分割后的中序分割前序// cout<<"先序左";i++) {// }// cout<<"先序右";i++) {// }// cout<<"中序左";i<lftinEnd;i++) {// }原创 2025-02-13 21:43:20 · 318 阅读 · 0 评论 -
18.106. 从中序与后序遍历序列构造二叉树
要一直用新的节点,都得改成传入的索引参数。//左闭右开,相等时意味着空了。//不能用size了!因为容器没变了。直接用传入的索引参数。//中//从后序取出根节点//不能用size了!因为容器没变了。直接用传入的索引参数。//太长了。分开写比较好//用根节点找中序切割点int idx=0;//不能用0到size!都要换成索引的参数idx++) {//}idx<inend;原创 2025-02-13 20:40:52 · 1600 阅读 · 0 评论 -
17.112.路经总和
自己写的:确实就是他的逻辑public:bool flg;bool l,r;//默认为false//左//右//中。return l|r;bool hasPathSum(TreeNode* root, int targetSum) {//迭代不方便回溯int sum=0;//回溯变量。原创 2025-02-13 07:08:03 · 448 阅读 · 0 评论 -
16.513找树左下角的值
class Solution {//递归public:int res;//终止条件是叶结点而非空节点if (depth>md) {//维护md=depth;return;//中。不需要逻辑处理//左//右return;return res;public:int findBottomLeftValue(TreeNode* root) {//迭代int v;while (!i<sz;i++) {//中取出即可,没有处理que.pop();原创 2025-02-13 05:05:52 · 181 阅读 · 0 评论 -
15.404.左叶子之和
public:int sumOfLeftLeaves(TreeNode* root) {//层序迭代int sum=0;while (!i<sz;i++) {//中que.pop();//左//右return sum;//终止条件//左//右//中return sum;//用中串联起来int sumOfLeftLeaves(TreeNode* root) {//递归return sum;原创 2025-02-12 20:09:27 · 305 阅读 · 0 评论 -
13.257.二叉树的所有路径
public://注意这里的path只是单纯复制,不是引用//中if (root->left==nullptr && root->right==nullptr) {//是叶子结点return;//不用回退了.因为是单纯复制用值。函数退出来之后没有变化。隐含了回溯//左//右return;//参数准备好,直接进入递归if (!return res;迭代版:public://这里要迭代遍历,而不是层序遍历,故用stack//统一排除,就不用在每个栈前面判断。原创 2025-02-12 18:05:07 · 405 阅读 · 0 评论 -
12.110.平衡二叉树
public:////左//这是在左右中写了之后再写的。//右//这是在左右中写了之后再写的。//中// int res;//以左右最大的高度+1为整个子树的高度//用三元运算符简化条件判断//用三元运算符简化条件判断。原创 2025-02-12 13:32:25 · 160 阅读 · 0 评论 -
11.222完全二叉树的节点个数
public:int countNodes(TreeNode* root) {//基础递归版//左//右//中//精简递归版//左右中public:int countNodes(TreeNode* root) {//基础层序遍历版int cnt=0;while (!i<sz;cnt++;return cnt;public:int countNodes(TreeNode* root) {//精简递归速算版//判断是否满二叉。原创 2025-02-12 13:01:36 · 180 阅读 · 0 评论 -
9.3.559n叉树的最大深度
public:int maxDepth(Node* root) {//迭代版while (!depth++;i<sz;i++) {//遍历当前层que.pop();j++) {//遍历子结点,压入下一层递归版:public:int maxDepth(Node* root) {//递归版i++) {原创 2025-02-11 19:18:30 · 153 阅读 · 0 评论 -
8.3.572另一颗树的子树
//和100相同的树的唯一区别就是这里的return多了后面两个条件迭代法:遍历+递归。就是再100.相同的树的基础上加一个遍历就是。问题:因为遍历时要防止访问空指针。如果是比较的话有专门的条件判断语句。故不用判空。que.empty()) {//这是用队列深搜了属于是。先序遍历que.pop();原创 2025-02-11 17:30:42 · 333 阅读 · 0 评论 -
8.2.100相同的树
ival) {//再由左到右,由上到下比较下一队。入队顺序和递归的参数传入顺序一样。//下面三句和return语句是等价的。只是这样拆开来更容易看得清楚。不然混在一起没了次序难分清。原创 2025-02-11 15:40:22 · 240 阅读 · 0 评论 -
5.10.111二叉树的最小深度
while (!depth++;i<sz;原创 2025-02-11 14:46:17 · 163 阅读 · 0 评论 -
5.9.104二叉树的最大深度
i<sz;depth++;原创 2025-02-11 14:29:02 · 152 阅读 · 0 评论 -
7.101. 对称二叉树
public:bool isSymmetric(TreeNode* root) {//迭代写法while (!que.pop();que.pop();//先排除第一种情况,那剩下的就是左右只有一个为空,或者都不为空的情况//为空也可以入队递归版问题:1、不是单纯遍历,而是开了个头之后取了它的返回值去比较。这个头一定要写的,才好让它自己去递归。public://不是单纯遍历,而是开了个头之后去比较。这个头一定要写的,才好让它自己去递归//1入口2出口3逻辑。原创 2025-02-11 11:49:42 · 270 阅读 · 0 评论 -
5.7.116. 填充每个节点的下一个右侧节点指针
Node* p;Node* q;//p是前一个节点,q是当前节点inext=q;p=p->next;原创 2025-02-10 18:34:26 · 300 阅读 · 0 评论 -
6.226翻转二叉树
i原创 2025-02-10 17:27:38 · 158 阅读 · 0 评论 -
5.5429.n叉树的层序遍历
i<sz;j<sz2;j++) {//这里面小心别弄错写成i了return res;原创 2025-02-10 16:56:09 · 235 阅读 · 0 评论 -
5.4.637.二叉树的层平均值
i<sz;return res;原创 2025-02-10 16:24:08 · 169 阅读 · 0 评论 -
5.3.199. 二叉树的右视图
/因为que.size在循环体里会pop,所以要定下来i<sz;return res;原创 2025-02-10 16:14:35 · 213 阅读 · 0 评论 -
5.2.107二叉树的层序遍历Ⅱ
public://预存一个while (!que.empty()) {//一层循环对应一层树遍历。第一层时就在把第三层塞入队列了i<sz;i++) {//操作第三层que.pop();return res;原创 2025-02-10 15:36:38 · 238 阅读 · 0 评论 -
5.102.1层序遍历
i<sz;//因为返回形式是vector<vector<int>>。要熟悉这种写法return res;public://1、入口 2、出口 3、单层递归逻辑if (!//空指针返回//创建一个新的空的数组进去//对应深度对应插入,对号入座//从0开始生成。每到新的一层就创建一个新的数组。第一层进去也在第一层才开始生成,保证后面再次回到这层时不会重复创建//开头和结果每一层都要用到,每层会加1也要用。原创 2025-02-10 15:11:30 · 164 阅读 · 0 评论 -
3.102.二叉树迭代遍历(非递归版)
st.pop();return res;public://不在开头预存,因为后面要一直预存。所以放到后面一起定义while (cur!=NULL ||!st.empty()) {//左子树和右子树共用一个出口if (cur!=NULL) {//一直预存} else {//退一步st.pop();return res;st.pop();return res;原创 2025-02-09 16:52:33 · 464 阅读 · 0 评论 -
2.144.前中后序遍历
public://1、确定参数和返回值(入口)//2、确定终止条件(出口)//3、确定单层递归的逻辑return res;public://1、递归入口;2、递归出口return res;public://1、递归入口;2、递归出口//3、单层递归逻辑return res;原创 2025-02-03 17:03:52 · 182 阅读 · 0 评论
分享