给你一个二叉树的根节点 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);
}
}