鸡排不白 2022-03-26 23:43 采纳率: 0%
浏览 8

二叉树结构体索引 t[p].l 与 p*2 有什么区别

建树语句

void build(int p, int l, int r)
{
    t[p].l = l;
    t[p].r = r;
    if (l == r)
    {
        t[p].value = a[l];
        return;
    }
    int mid = l + r >> 1;
    build(p * 2, l, mid);
    build(p * 2 + 1, mid + 1, r);
    t[p].value = t[p * 2].value + t[p * 2 + 1].value 


```;
}
正常运行



```c++
long long ask(int p, int x, int y)
{
if (x <= mid)
        ans += ask(p*2, x, y);
    if (y > mid)
        ans += ask(p*2+1, x, y);
}

long long ask(int p, int x, int y)
{
    if (x <= mid)
        ans += ask(t[p].l, x, y);
    if (y > mid)
        ans += ask(t[p].r, x, y);
    return ans;
}

为什么上面能得出正确答案 而下面却出问题
考虑过是叶节点问题,但叶节点也应该是一样的。数组用的是全局变量,已经初始化。不知道有什么没考虑到的地方

  • 写回答

1条回答 默认 最新

  • 关注

    ask()中p应该是数组的下标,p*2得到的是下标;
    而t[p].l是数组元素中的值,不是下标;

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月26日

悬赏问题

  • ¥40 微信小程序 使用vant组件ActionSheet 下拉面板,内容区域滚动会触发。scroll-view自定义下拉刷!即使设置停止下拉刷新也不行。
  • ¥15 专业问题提问,7月5号2点之前
  • ¥25 使用cube ai 导入onnx模型时报错
  • ¥15 关于#微信小程序#的问题:用一个网页显示所有关联的微信小程序数据,包括每个小程序的用户访问量
  • ¥15 root的安卓12系统上,如何使apk获得root或者高级别的系统权限?
  • ¥20 关于#matlab#的问题:如果用MATLAB函数delayseq可以对分数延时,但是延时后波形较原波形有幅度上的改变
  • ¥15 使用华为ENSP软件模拟实现该实验拓扑
  • ¥15 通过程序读取主板上报税口的数据
  • ¥15 matlab修改为并行
  • ¥15 尝试访问%1服务的windows注册表时遇到问题。必须先解决此问题,然后才能运行安装过程。(请确认您正在使用管理员权限运行)373