题目
思路
不多说了,回溯先套模板,然后改动一下。
回溯真的牛逼,笔试中常用做法,可以搭配备忘录等剪枝优化。
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
List<String> res = new ArrayList<>();
public List<String> binaryTreePaths(TreeNode root) {
if (root == null) {
return res;
}
String track = "";
dfs(root, track);
return res;
}
public void dfs(TreeNode root, String track) {
if (root == null) {
return;
}
track += String.valueOf(root.val);
if (isLeaf(root)) {
res.add(track);
}
track += "->";
if (root.left != null) {
dfs(root.left, track);
}
if (root.right != null) {
dfs(root.right, track);
}
}
public boolean isLeaf(TreeNode root) {
// 当节点的左右子树都为空时是叶子节点
if (root.left == null && root.right == null) {
return true;
}
return false;
}
}