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 binaryTreePaths(TreeNode root) { List 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 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); // 回溯:恢复到进入本节点前的状态 } }