二分搜索数的rank,老师给说下思路
# 具体遇到的问题
# 报错信息的截图
# 相关课程内容截图
# 尝试过的解决思路和结果
# 粘贴全部相关代码,切记添加代码注释(请勿截图)
在这里输入代码,可通过选择【代码语言】突出显示
rank(e){ rank(,e,); } rank(Node node,e,dept){ (==node) -; (node..compareTo(e)<){ rank(node.,e,++dept); } (node..compareTo(e)==){ -dept; } rank(node.,e,++dept); }
20
收起
正在回答
2回答
rank 的大体逻辑上,如果当前节点比要寻找的元素小,往右子树找,rank 值需要把左子树和自己的节点总数添加上;
如果当前节点比要寻找的元素大,直接往左边找就可以,不需要求 floor。
另外,你的代码对于 Node 中 sz 的维护可能有问题。我写了一版代码,可以参考。另外,在代码中,也包含一个测试方式。简单来说,在一棵二分搜索树中,包含 1-n 共 n 个元素,那么元素 i 的 rank 值就应该是 i。
继续加油!:)
liuyubobobo
2020-10-23 11:14:52
每个节点需要记录以这个节点为根节点的子树有多少个元素。一个节点的 rank 值就是这个节点的左子树的节点个数 + 1。
继续加油!:)
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星