【发布时间】:2015-05-30 02:18:27
【问题描述】:
我已经使用 DFS 和递归来编码这个问题,如下所示:
/**
* recursive
*/
public static List<List<Integer>> printAllPath(TreeNode root) {
List<List<Integer>> rst = new ArrayList<List<Integer>>();
helper(rst, new ArrayList<Integer>(), root);
return rst;
}
public static void helper(List<List<Integer>> rst, ArrayList<Integer> list,
TreeNode root) {
if (root == null) {
return;
}
list.add(root.val);
if (root.left == null && root.right == null) {
rst.add(new ArrayList<Integer>(list));
}
helper(rst, list, root.left);
helper(rst, list, root.right);
list.remove(list.size() - 1);
}
然后上网一搜,发现这个算法的平均时间复杂度是O(nlogn),最坏的情况是O(n^2),是这样吗?为什么?谁能解释一下?
我对分析树的时间复杂度不是很熟悉。在这个问题中,如果我用Queue来实现,时间复杂度应该是O(n)吧?因为我只迭代整个树一次。
但是如何分析使用递归的树的时间复杂度。?
【问题讨论】:
-
你想在这里解决什么问题?
-
@TimBiegeleisen 我不知道如何分析这个算法的时间复杂度
-
不知道你要做什么,但是因为一旦运行时间应该是
O(n),你就会触摸树中的每个节点。
标签: algorithm recursion time-complexity binary-tree depth-first-search