请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

我调试过程中发现,课程中线段树的树形图示与实际代码可能不相符

如下图中,最底层叶子节点总是靠右的,而代码跑出来的结果却总是靠左。
以节点A[5…9]为例,mid = 7,从代码来看,左分支节点应该为A[5…7],右分支节点应该为A[8…9];
同时,我们不可以把代码改为buildSegmentTree(leftTreeIndex, l, mid - 1);因为mid是可能为0的;
所以我认为,当节点的区间元素数量为奇数时,左子树应该涵盖更大的区间,而右子树偏少,所以整棵树的最底层叶子节点应该是靠左的。

不知道我想的对不对…

private void buildSegmentTree(int treeIndex, int l, int r){

        if(l == r){
            tree[treeIndex] = data[l];
            return;
        }

        int leftTreeIndex = leftChild(treeIndex);
        int rightTreeIndex = rightChild(treeIndex);

        // int mid = (l + r) / 2;
        int mid = l + (r - l) / 2;
        buildSegmentTree(leftTreeIndex, l, mid);
        buildSegmentTree(rightTreeIndex, mid + 1, r);

        tree[treeIndex] = merger.merge(tree[leftTreeIndex], tree[rightTreeIndex]);
    }

图片描述

正在回答

1回答

liuyubobobo 2020-05-01 01:39:08

你是的对的。代码中我的 mid 的计算方式实际上是下取整,并且左边包含 mid,所以在奇数的情况下,左边的节点会多。


虽然这个图也是线段树,但确实没有准确反映课程代码对应的线段树。抱歉!


继续加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 慕粉3458977 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-05-01 13:40:32
  • 提问者 慕粉3458977 #2
    想再额外追个问题哈,关于创业,或者说身为技术人员的创业,您个人觉得,我们最应该提升的是哪些方面的能力。我想这应该跟具体选择哪种类型的创业有关,想听一下老师的见解!
    回复 有任何疑惑可以回复我~ 2020-05-01 13:47:48
  • liuyubobobo 回复 提问者 慕粉3458977 #3
    这个问题太大了,而且如你所说,和具体的创业方向关系特别大,也和具体是做业务创业还是技术创业有关。我的经验是大多数技术人员普遍缺少的是对市场和运营的理解。如果团队人数超过5个,并且你是主导的话,大多数技术人员也需要加强基本的管理学训练。但不管怎么说,我觉得第一步还是找到一个创业的方向,并且有一个初步的尝试。很多时候创业史走一步看一步的,很难提前准备好。做更重要。不过现在的形式,整体我是不建议创业的,特别不建议辞职创业。
    回复 有任何疑惑可以回复我~ 2020-05-01 14:09:23
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信