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"]
思路:traverse 的方法;
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param root: the root of the binary tree
* @return: all root-to-leaf paths
*/
public List<String> binaryTreePaths(TreeNode root) {
List<String> list = new ArrayList<String>();
if(root == null) return list;
dfs(root, list, Integer.toString(root.val));
return list;
}
private void dfs(TreeNode root, List<String> list, String curStr) {
if(root.left == null && root.right == null) {
list.add(curStr);
return;
}
if(root.left != null){
dfs(root.left, list, curStr + "->" + root.left.val);
}
if(root.right != null){
dfs(root.right, list, curStr + "->" + root.right.val);
}
}
}
思路2: divide and conquer,递归函数的定义是:返回当前node为首的所有到根节点的path。
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param root: the root of the binary tree
* @return: all root-to-leaf paths
*/
public List<String> binaryTreePaths(TreeNode root) {
List<String> list = new ArrayList<String>();
if(root == null) {
return list;
}
List<String> leftPaths = binaryTreePaths(root.left);
List<String> rightPaths = binaryTreePaths(root.right);
for(String leftPath : leftPaths) {
list.add(root.val + "->" + leftPath);
}
for(String rightPath : rightPaths) {
list.add(root.val + "->" + rightPath);
}
if(list.size() == 0){
list.add(Integer.toString(root.val));
}
return list;
}
}