我的LeetCode代码仓:https://github.com/617076674/LeetCode
原题链接:https://leetcode-cn.com/problems/binary-tree-paths/description/
题目描述:
知识点:树、深度优先遍历、递归
思路:利用递归实现二叉树的深度优先遍历
递归出口:
(1)如果root为null,说明这是一棵空树,直接返回一个空的result结果即可,result是一个List<String>类型的变量。
(2)如果root的左右孩子均为null,说明这棵树中只有一个节点,我们将该节点添加进result中,并直接返回result即可。
递归过程:
递归调用该函数计算左子树和右子树的路径值,并和原root节点的值进行拼接得到所有路径,最后返回result。
时间复杂度是O(n),其中n是二叉树中的节点个数。空间复杂度是O(h),其中h为二叉树的高度。
JAVA代码:
public class Solution {
public List<String> binaryTreePaths(TreeNode root) {
List<String> result = new ArrayList<>();
if (null == root) {
return result;
}
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(root.val);
if(root.left == null && root.right == null) {
result.add(stringBuilder.toString());
return result;
}
stringBuilder.append("->");
List<String> leftResult = binaryTreePaths(root.left);
List<String> rightResult = binaryTreePaths(root.right);
for (String string : leftResult) {
StringBuilder temp = new StringBuilder();
result.add(temp.append(stringBuilder).append(string).toString());
}
for (String string : rightResult) {
StringBuilder temp = new StringBuilder();
result.add(temp.append(stringBuilder).append(string).toString());
}
return result;
}
}
LeetCode解题报告: