Given a binary tree, return all root-to-leaf paths.
For example, given the following binary tree:
1 / \ 2 3 \ 5
All root-to-leaf paths are:
["1->2->5", "1->3"]
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
/**
* 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>();
StringBuilder sb = new StringBuilder();
if (root != null) {
sb.append(root.val);
helper(root, result, sb);
}
return result;
}
public void helper(TreeNode root, List<String> list, StringBuilder sb) {
if (root.left == null && root.right == null) {
list.add(sb.toString());
}
if (root.left != null) {
sb.append("->");
sb.append(root.left.val);
helper(root.left, list, sb);
sb.delete(sb.lastIndexOf("->") , sb.length());
}
if (root.right != null) {
sb.append("->");
sb.append(root.right.val);
helper(root.right, list, sb);
sb.delete(sb.lastIndexOf("->") , sb.length());
}
}
}
用string的话会节省代码量:
public List<String> binaryTreePaths(TreeNode root) {
List<String> answer = new ArrayList<String>();
if (root != null) searchBT(root, "", answer);
return answer;
}
private void searchBT(TreeNode root, String path, List<String> answer) {
if (root.left == null && root.right == null) answer.add(path + root.val);
if (root.left != null) searchBT(root.left, path + root.val + "->", answer);
if (root.right != null) searchBT(root.right, path + root.val + "->", answer);
}