方法一:深度优先搜索
思路与算法 最直观的方法是使用深度优先搜索。在深度优先搜索遍历二叉树时,我们需要考虑当前的节点以及它的孩子节点。
1.如果当前节点不是叶子节点,则在当前的路径末尾添加该节点,并继续递归遍历该节点的每一个孩子节点。
2. 如果当前节点是叶子节点,则在当前路径末尾添加该节点后我们就得到了一条从根节点到叶子节点的路径,将该路径加入到答案即可。
复杂度分析
时间复杂度:O(N^2),其中 N 表示节点数目。在深度优先搜索中每个节点会被访问一次且只会被访问一次,每一次会对 path 变量进行拷贝构造,时间代价为 O(N)O(N),故时间复杂度为 O(N^2)。
空间复杂度:O(N^2),其中 N 表示节点数目。
方法二:**广度优先搜索 **
思路与算法 我们也可以用广度优先搜索来实现。我们维护一个队列,存储节点以及根到该节点的路径。一开始这个队列里只有根节点。在每一步迭代中,我们取出队列中的首节点,如果它是叶子节点,则将它对应的路径加入到答案中。如果它不是叶子节点,则将它的所有孩子节点加入到队列的末尾。当队列为空时广度优先搜索结束,我们即能得到答案。
复杂度分析 时间复杂度:O(N^2),其中 N 表示节点数目。分析同方法一。 空间复杂度:O(N^2),其中 N 表示节点数目。在最坏情况下,队列中会存在 个节点,保存字符串的队列中每个节点的最大长度为 NN,故空间复杂度为 O(N^2)