思路:递归
(1)若树为空,直接返回result;遇到叶子节点,返回根节点构造的result。
(2)递归遍历左子树,找出所有从左孩子到叶子节点的路径。
(3)递归遍历右子树,找出所有从右孩子到叶子节点的路径。
(4)在每个路径前面加上根节点。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<String> binaryTreePaths(TreeNode root) {
List<String> result = new ArrayList<String>();
if (root == null)
return result;
if (root.left == null && root.right == null) {
result.add("" + root.val);
return result;
}
List<String> left = binaryTreePaths(root.left);
List<String> right = binaryTreePaths(root.right);
int lenLeft = left.size();
int lenRight = right.size();
for (int i = 0; i < lenLeft; i++)
result.add(root.val + "->" + left.get(i));
for (int i = 0; i < lenRight; i++)
result.add(root.val + "->" + right.get(i));
return result;
}
}
Runtime: