一、leetcode算法
1、二叉树的所有路径
1.1、题目
给你一个二叉树的根节点 root ,按任意顺序 ,返回所有从根节点到叶子节点的路径。
叶子节点 是指没有子节点的节点。
示例 1:
输入:root = [1,2,3,null,5]
输出:[“1->2->5”,“1->3”]
示例 2:
输入:root = [1]
输出:[“1”]
1.2、思路
思路一:本题我们可以使用深度优先遍历,在进行深度优先遍历的时候我们要考虑当前的节点以及它的孩子节点。
如果当前节点不是叶子节点,则在当前的路径末尾添加该节点,并继续递归遍历该节点的每一个孩子节点。
如果当前节点是叶子节点,则在当前路径末尾添加该节点后我们就得到了一条从根节点到叶子节点的路径,将该路径加入到答案即可。
1.3、答案
class Solution { public List<String> binaryTreePaths(TreeNode root) { List<String> paths = new ArrayList<>(); resultPath(root,"",paths); return paths; } public void resultPath(TreeNode root,String path,List<String> paths){ if(root != null){ StringBuffer pathSb = new StringBuffer(path); pathSb.append(Integer.toString(root.val)); if(root.left == null && root.right == null){ // 当前节点是叶子节点 paths.add(pathSb.toString()); //把路径加入到答案中 }else{ pathSb.append("->"); //当前节点不是叶子节点,继续递归遍历 resultPath(root.left,pathSb.toString(),paths); resultPath(root.right,pathSb.toString(),paths); } } } }