Algorithm/src/main/java/tree/BinaryTreePaths.java

40 lines
1.3 KiB
Java
Raw Normal View History

2025-05-30 15:12:21 +08:00
package tree;
import java.util.ArrayList;
import java.util.List;
/**
* 题目 257. 二叉树的所有路径 ( binaryTreePaths)
* 描述给你一个二叉树的根节点 root 任意顺序 返回所有从根节点到叶子节点的路径
* 叶子节点 是指没有子节点的节点
*
* 示例 1
输入root = [1,2,3,null,5]
输出["1->2->5","1->3"]
* 链接https://leetcode.cn/problems/binary-tree-paths/
*/
public class BinaryTreePaths {
public List<String> binaryTreePaths(TreeNode root) {
List<String> res = new ArrayList<>();
if (root == null) return res;
StringBuilder sb = new StringBuilder();
dfs(root, sb, res);
return res;
}
private void dfs(TreeNode node, StringBuilder sb, List<String> res) {
int len = sb.length(); // 记录进入当前节点前的长度
sb.append(node.val);
// 如果是叶子节点
if (node.left == null && node.right == null) {
res.add(sb.toString());
} else {
sb.append("->");
if (node.left != null) dfs(node.left, sb, res);
if (node.right != null) dfs(node.right, sb, res);
}
sb.setLength(len); // 回溯:恢复到进入本节点前的状态
}
}