题目
给定一个二叉树,返回所有从根节点到叶子节点的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
输入:
1
/ \
2 3
\
5
输出: ["1->2->5", "1->3"]
解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3
解法
思路: 递归,具体细节看代码中注释。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
// 递归
public List<String> binaryTreePaths(TreeNode root) {
List<String> result = new ArrayList<>();
if(root == null){
return result;
}
int val = root.val;
// 判断当前节点是否是叶子节点,如果是叶子节点,直接把当前值加上即可。
if(root.left == null && root.right == null){
result.add(val+"");
return result;
}
// 递归查找左、右子树的路径
List<String> left = binaryTreePaths(root.left);
List<String> right = binaryTreePaths(root.right);
for(String s : left){
result.add(val+"->"+s);
}
for(String s : right){
result.add(val+"->"+s);
}
return result;
}
}
总结
本篇文章讲解了算法题目的思路和解法,代码和笔记由于纯手打,难免会有纰漏,如果发现错误的地方,请第一时间告诉我,这将是我进步的一个很重要的环节。以后会定期更新算法题目以及各种开发知识点,如果您觉得写得不错,不妨点个关注,谢谢。