为了账号安全,请及时绑定邮箱和手机立即绑定

js创建线段树导致堆栈溢出怎么解?

js创建线段树导致堆栈溢出怎么解?

慕的地6264312 2018-08-26 10:30:36
class SegmentTree {    constructor(arr, merge) {           this.data = arr.slice();        this.tree = [];        this.merge = merge;        this._buildSegmentTree(0, 0, this.data.length - 1);     }     _buildSegmentTree(treeIndex, l, r) {              if (l === r) {            this.tree[treeIndex] = this.data[l];            return;         }                let leftTreeIndex = this.leftChild(treeIndex);        let rightTreeIndex = this.rightCild(treeIndex);        let mid = (l + (l + r) / 2) | 0;        this._buildSegmentTree(leftTreeIndex, l, mid);        this._buildSegmentTree(rightTreeIndex, mid + 1, r);        // 根据子节点创建父节点         this.tree[treeIndex] = this.merge(this.tree[leftTreeIndex], this.tree[rightTreeIndex]);     }     leftChild(index) {        return index * 2 + 1;     }     rightCild(index) {        return index * 2 + 2;     } }let arr = [1, 2, 3];let segTree = new SegmentTree(arr, (a, b) => a + b);console.log(segTree.tree);
查看完整描述

2 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

判断条件写的有问题吧,没有及时停止递归

查看完整回答
反对 回复 2018-08-27
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

左右边界中间值计算出现了问题,这里应该是:

let mid = (l + (r - l) / 2) | 0;


查看完整回答
反对 回复 2018-08-27
  • 2 回答
  • 0 关注
  • 1046 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信