96SEO 2026-02-19 12:38 0
若它的左子树不空则左子树上所有结点的值均小于它的根结点的值若它的右子树不空则右子树上所有结点的值均大于它的根结点的值它的左、右子树也分别为二叉搜索树

递归函数的参数传入的就是根节点和要搜索的数值返回的就是以这个搜索数值所在的节点代码如下
因为二叉搜索树的节点是有序的所以可以有方向的去搜索。
如果root-val
};因为搜索到了目标节点所以要立即返回这样才符合找到节点就返回的逻辑搜索某一条边如果不加return那么就是遍历整棵树了。
因为二叉搜索树的特殊性也就是节点的有序性可以不使用辅助栈或者队列就可以写出迭代法。
对于二叉搜索树不需要回溯的过程因为节点的有序性就帮我们确定了搜索的方向。
例如要搜索元素为3的节点我们不需要搜索其他节点也不需要做回溯查找的路径已经规划好了。
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
中序遍历下输出的二叉搜索树节点的数值是有序序列。
有了这个特性验证二叉搜索树就相当于变成了判断一个序列是不是递增的了。
思路1可以递归中序遍历将二叉搜索树转变成一个数组然后只要比较一下这个数组是否是有序即可注意二叉搜索树中不能有重复元素。
{traversal(root);//判断数组是否单增for(int
}以上代码中把二叉树转变为数组来判断是最直观的但其实不用转变成数组可以在递归遍历的过程中直接判断是否有序。
不能单纯的比较左节点小于中间节点右节点大于中间节点就完事了写出了类似这样的代码
可能是int的最小值如果这样使用最小的int来比较也是不行的此时可以初始化比较元素为longlong的最小值。
要定义一个longlong的全局变量用来比较遍历的节点是否有序即上一个节点的值递归函数返回bool类型供上一个节点因此递归函数为
遍历到空节点返回假设如果就是空节点那是二叉搜索树因此返回true代码如下
root-val就返回false注意元素相同时候也要返回false代码如下
那如果后台测试数据有longlong的最小值呢无法再初始化一个更小的值了吧建议避免初始化最小值使用双指针的办法快慢指针首先取到最左面节点数值每次快指针与之前的值做比较即可。
/**************双指针优化****************/
可以用迭代法模拟二叉树中序遍历且与遍历普通二叉树模板类似迭代法中序遍历稍加改动就可以了变成二叉搜索树迭代模板代码如下:
NULL)return;traversal(node-left);
其实在二叉搜素树中序遍历的过程中我们就可以直接计算了需要用一个pre节点记录一下cur节点的前一个节点。
NULL)return;traversal(node-left);
可以用迭代法模拟二叉树中序遍历且与遍历普通二叉树模板类似迭代法中序遍历稍加改动就可以了在遍历中加入前一个节点的指针并不断判断更新最小差值即可代码如下:
/****************迭代法***************/
遇到在二叉搜索树上求什么最值求差值之类的都要思考一下二叉搜索树可是有序的要利用好这一特点。
同时要学会在递归遍历的过程中如何记录前后两个指针这也是一个小技巧学会了还是很受用的。
如果不是二叉搜索树最直观的方法一定是把这个树都遍历了用map统计频率把频率排个序最后取前面高频的元素的集合。
至于用前中后序哪种遍历也不重要因为就是要全遍历一遍这里采用前序遍历代码如下
C中只能根据map的key进行排序无法对value排序所以要把map转化数组即vector再进行排序当然vector里面放的也是对组
此时数组vector中已经是存放着按照频率排好序的pair那么把前面高频的元素取出来就可以了代码如下
//判断出现频率最大的几个数result.push_back(vec[i].first);
resMap.end());sort(vec.begin(),
//判断出现频率最大的几个数result.push_back(vec[i].first);
//把频率最大的几个数存入结果数组elsebreak;}return
}遍历有序数组的元素出现频率从头遍历相邻两个元素作比较然后就把出现频率最高的元素输出就可以了。
弄一个指针指向前一个节点这样每次cur当前节点才能和pre前一个节点作比较。
应该是先遍历一遍数组找出最大频率maxCount然后再重新遍历一遍数组把出现频率为maxCount的元素放进集合但这种方式遍历了两遍数组。
每次频率最大的数都放进结果集若出现更大的频率的数更新整个结果集清空结果集并把最大频率的数放到结果集
如果和最大值相同放进result中result.push_back(cur-val);
maxCount而且要清空结果集因为结果集之前的元素都失效了if
很关键的一步不要忘记清空result之前result里的元素都失效了result.push_back(cur-val);
NULL)return;traversal(node-left);
//更新旧指针/**********核心细节代码区****************/if(cnt
//收获频率最大的数res.push_back(node-val);else
之前存入的结果都作废res.push_back(node-val);
//当前新的长度的数记得存进去}traversal(node-right);
只要把中序遍历转成迭代中间节点的处理逻辑完全一样直接粘贴代码的即可
//更新旧指针/**********核心细节代码区****************/if(cnt
//收获频率最大的数res.push_back(cur-val);else
之前存入的结果都作废res.push_back(cur-val);
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback