今日题目
T257 二叉树的所有路径(简单,搜索)
题目描述
给定一个二叉树,返回所有从根节点到叶子节点的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
输入:
1
/ \
2 3
\
5
输出: [“1->2->5”, “1->3”]
解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3
标签
深度优先搜索,广度优先搜索
解析
方法一:深度优先搜索
这道题很显然可以使用深度优先搜索的方法解决。对于每一个节点,如果其不为空,则将其值加入路径末尾。随后判断其是否为叶节点(左右子节点是否同时为空)。如果是,则将路径加入路径集;如果不是,则递归对左右子节点重复以上过程。
方法二:广度优先搜索
对于可以使用深度优先搜索的题目,我们同样可以使用广度优先搜索的方法进行求解。
建立两个队列,分别表示经过的节点以及它们对应的路径。使用广度优先搜索的方法,将非空节点逐个添加到队列中。在遍历节点时,判断其是否为叶节点,如果是,则将路径添加到路径集中,否则将非空的左右子节点添加到队列中。
此处省略广度优先搜索的代码。
python解法
class Solution:
def binaryTreePaths(self
, root
: TreeNode
) -> List
[str]:
paths
= list()
def getPath(root
, path
):
if root
:
path
+= root
.val
if not root
.left
and not root
.right
:
paths
.append
(path
)
else:
path
+= '->'
getPath
(root
.left
, path
)
getPath
(root
.right
, path
)
getPath
(root
,'')
return paths
C++解法
class Solution
{
public:
vector
<string
> paths
;
void getPath(TreeNode
*root
, string path
)
{
if (root
!= nullptr)
{
path
+= to_string(root
->val
);
if (root
->left
== nullptr && root
->right
== nullptr)
{
paths
.push_back(path
);
return;
}
path
+= "->";
getPath(root
->left
, path
);
getPath(root
->right
, path
);
}
}
vector
<string
> binaryTreePaths(TreeNode
*root
)
{
getPath(root
, "");
return paths
;
}
};