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


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);

https://img3.mukewang.com/5b8362650001e27a08000594.jpg

慕的地6264312
浏览 1051回答 2
2回答

largeQ

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

人到中年有点甜

左右边界中间值计算出现了问题,这里应该是:let mid = (l + (r - l) / 2) | 0;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Node.js