intqueryFr(int x, int val, int ans){
if (tree[x].val>=val)
{//如果当前值大于val,就说明查的数大了,所以要往左子树找if (tree[x].ls==0)//如果没有左子树就直接返回找到的ansreturn ans;
else//如果不是的话,去查左子树returnqueryFr(tree[x].ls,val,ans);
}
else {//如果当前值小于val,就说明我们找比val小的了if (tree[x].rs==0)//如果没有右孩子,就返回tree[x].val,因为走到这一步时,我们后找到的一定比先找到的大(参考第二条性质)return (tree[x].val<val) ? tree[x].val : ans
//如果有右孩子,,我们还要找这个节点的右子树,因为万一右子树有比当前节点还大并且小于要找的val的话,ans需要更新if (tree[x].cnt!=0)//如果当前节数的个数不为0,ans就可以更新为tree[x].valreturnqueryFr(tree[x].rs,val,tree[x].val);
else//反之ans不需要更新returnqueryFr(tree[x].rs,val,ans);
}
}
1|0找后继
intqueryNe(int x, int val, int ans){
if (tree[x].val<=val)
{
if (tree[x].rs==0)
return ans;
elsereturnqueryNe(tree[x].rs,val,ans);
}
else {
if (tree[x].ls==0)
return (tree[x].val>val)? tree[x].val : ans;
if (tree[x].cnt!=0)
returnqueryNe(tree[x].ls,val,tree[x].val);
elsereturnqueryNe(tree[x].ls,val,ans);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下