给定二叉树,问题是找到所有的根到叶路径。我们通过以列表的形式传递路径并在我们点击树叶时将其添加到我们的结果中来了解算法。
我的问题存储所有路径消耗的空间是多少。我的直觉是每条路径将消耗树高(O(h))的内存顺序,如果我们的完整二叉树中有2 * n - 1个节点,那么有n个叶子,每个叶子对应一个路径假设树高度平衡,空间复杂度将为O(n * log(n))。我的分析是否正确?
答案 0 :(得分:2)
您的推理是正确的,但可以更精确。平衡二叉树不一定是full binary tree。
设 N(h)是高度 h 时的路径数。那么 N(h)≤2N(h - 1)这是因为,给定一个高度 h 的树,孩子们每个都是高度最多的树 h - 1 。所以
N(h)= O(2 h )。
现在我们需要绑定 h 。由于 h 出现在指数中,因此仅查找其增长顺序是不够的。更准确地说,它是known
n≥2 h - 1
所以
h≤log(n + 1)
将此插入我们之前的内容
N(h)= O(2 log(n + 1))= O(n)。
正如您所写,内存是路径上节点的每路径总和。每条路径上的节点总和最多为 log(n + 1)。结合上述所有内容可得出 O(n log(n))。