为什么80%的码农都做不了架构师?>>>   
问题:
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"]
解决:
① 简单的二叉树遍历,遍历的过程中记录之前的路径,一旦遍历到叶子节点便将该路径加入结果中。
/**
  * Definition for a binary tree node.
  * public class TreeNode {
  *     int val;
  *     TreeNode left;
  *     TreeNode right;
  *     TreeNode(int x) { val = x; }
  * }
  */
 public class Solution { //17ms
     List<String> res = new ArrayList<>();
     public List<String> binaryTreePaths(TreeNode root) {
         if(root != null) findPath(root,String.valueOf(root.val));
         return res;
     }
     public void findPath(TreeNode node,String path){
         if(node.left == null && node.right == null) res.add(path);
         if(node.left != null) findPath(node.left,path + "->" + node.left.val);
         if(node.right != null) findPath(node.right,path + "->" + node.right.val);
     }
 }
② 进化版
public class Solution { //15ms
     public List<String> binaryTreePaths(TreeNode root) {
         List<String> res = new ArrayList<String>();
         if (root == null) return res;
         getPath(root, "", res);
         return res;
     }
     public void getPath(TreeNode root, String path, List<String> res) {
         if (root.left == null && root.right == null)
             res.add(path + root.val);
         else {
             if (root.left != null) getPath(root.left, path + root.val + "->", res);
             if (root.right != null) getPath(root.right, path + root.val + "->", res);
         }
     }
 }
【注意】return影响效率
public class Solution { //15ms
     public List<String> binaryTreePaths(TreeNode root) {
         List<String> res = new ArrayList<String>();
         if (root == null) return res;
         getPath(root, "", res);
         return res;
     }
     public void getPath(TreeNode root, String path, List<String> res) {
         if (root.left == null && root.right == null){
             res.add(path + root.val);
             //return; 加上return耗时为18ms
         }
         if (root.left != null) getPath(root.left, path + root.val + "->", res);
         if (root.right != null) getPath(root.right, path + root.val + "->", res);
     }
 }
 
 



















