給你一個二叉樹的根節點?root
?,按?任意順序?,返回所有從根節點到葉子節點的路徑。
葉子節點?是指沒有子節點的節點。
思路:
先編輯所有節點,記錄每一個節點的路徑;
判斷當前節點是否為葉子節點,如果是,則將當前節點的路徑存儲起來。
public static List<String> binaryTreePaths(TreeNode root){List<String> res=new ArrayList<>(); //葉子節點的路徑if(root==null) return res;List<Integer> path=new ArrayList<>(); //所有節點的路徑findPath(root,path,res);return res;}//記錄每一條路徑,當節點是否為葉子節點時,存入res中public static void findPath(TreeNode node,List<Integer> path,List<String> res){//記錄每一個節點的路徑path.add(node.val);//葉子節點,將該節點的路徑,存入res中if(node.left==null && node.right==null){StringBuilder sb=new StringBuilder(); //記錄路徑for(int i=0;i<path.size()-1;i++){sb.append(path.get(i)).append("->");}sb.append(path.get(path.size()-1)); //記錄最后一個節點的路徑res.add(sb.toString());return;}if(node.left!=null){findPath(node.left,path,res);path.remove(path.size()-1);}if(node.right!=null){findPath(node.right,path,res);path.remove(path.size()-1);}}