在二叉搜索树中打印最长路径的时间复杂度

时间:2018-07-17 06:37:08

标签: javascript search tree time-complexity binary-search-tree

问题:给定二叉搜索树,打印出最长的路径。

方法:存储每个级别的可能深度,并过滤出最长的深度。这样做的时间复杂度必须至少为 O(n),因为我们从某种意义上来说是在计算树的直径。但是,在每个级别上,我们都在一组可能的路径上调用reduce,以便确定每个阶段的最长路径。我认为这将使复杂性O(nk)变得更复杂,其中k是每个阶段的数组长度。空间复杂度为O(n + k + j),其中n是递归调用的深度,而k和j是数组。

问题:这种对时间复杂度的分析正确吗?二,如何在O(n)时间内完成?

function printLongestPath(root = this.head, paths = [], finishedPaths = []) {

        if (!root) return;

        paths.push(root.data);

        if (!root.left && !root.right) {
            finishedPaths.push(paths);
            paths.pop();
            return;
        }

        this.printLongestPath(root.left, paths, finishedPaths);
        this.printLongestPath(root.right, paths, finishedPaths);

        // Pop once more once both paths have finished because it means we are in an intermediary step

        paths.pop();


        return finishedPaths.reduce((longest, current) => {
          return current.length > longest.length ? current : longest
        }, finishedPaths[0]);

    }

0 个答案:

没有答案