图解面试题 - 二叉树的所有路径
题目描述
给定一个二叉树,返回所有从根节点到叶子节点的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
输入:
1
/ \
2 3
\
5
输出: ["1->2->5", "1->3"]
解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3
DFS实现
要求从根节点到叶子节点的路径,最适合干这件事情的就是DFS(Depth First Search 深度优先搜索)。
DFS的特点就是一竿子插到底
具体实现思路是这样:
首先初始化临时路径为空“”
之后每下降一层,就将临时路径跟当前节点的值拼接上
对于任何一个节点,要不就是叶子节点,要不就是非叶子节点,我们可以这样处理:
如果当前节点如果是叶子节点,那么拼接的内容是
root.val
如果当前节点不是叶子节点,那么拼接的内容是
root.val+"->"
完整的执行过程如下图:
时间复杂度:O(N^2)
空间复杂度:O(N^2)
java代码:
python代码:
迭代实现
我们也可以使用BFS(Breadth First Search 宽度优先搜索算法)来完成这道
我们来看下详细的执行过程:
首先是初始化,将【根节点1,""】放入到队列中
第二步,从队列中弹出【1,""】,1
不是叶子节点,且
1
有左节点,于是将左节点以及拼接的"1->"放入队列中
1
也有右节点,再将右节点以及拼接的"1->"放入队列中
此时队列中就有两个元素【2,"1->"】,【3,"1->"】
第三步,从队列中弹出【2,"1->"】,2
不是叶子节点
2
有右节点,于是将右节点以及拼接的"1->2->"放入队列中
之后再弹出【3,"1->"】,由于3
是叶子节点,于是拼接成"1->3"
后,将其放入到最终结果集中
第四步,从队列中弹出【5,"1->2->"】,由于5
是叶子节点,于是拼接成"1->2->5"
后,将其放入到最终结果集中
完整的执行过程如下图:
时间复杂度:O(N^2)
空间复杂度:O(N^2)
java代码:
python代码:
欢迎关注公众号 大话算法,收看更多精彩内容
版权声明: 本文为 InfoQ 作者【9527】的原创文章。
原文链接:【http://xie.infoq.cn/article/b0dbba54ea776e6bbe1220892】。文章转载请联系作者。
评论