Java数据结构之257二叉树的所有路径

二叉树的所有路径

给定一个二叉树,返回所有从根节点到叶子节点的路径。

算法分析:

  1. 假设起始节点为1;先搜索1节点的右子节点为2,此时将1节点置为已搜索状态;判断2节点是否为已搜索状态,若未搜索,则将2节点置为已搜索状态;每次都优先搜索判断右侧邻接节点;
  2. 如图所示,若此时已搜索至2节点,发现右子节点为null故递归至上一个节点2搜索左子节点5,继续搜索判断5节点无左右子节点,故递归返回至1节点
  3. 此时搜索判断1节点的左侧邻接节点3不为已搜索状态,故继续进行先右侧后左侧邻接节点搜索判断操作;
  4. 直至最后一个节点3不存在左右子节点,故递归至最初的1节点;判断结束,搜索结束

有关于具体的树类结构的DFS算法分析见:https://www.cnblogs.com/njuptzheng/p/13329974.html

代码实现:

class Solution {
    public List<String> binaryTreePaths(TreeNode root) {
        List<String> paths = new ArrayList<String>();
        String path = "";
        sreachPaths(root,paths,path);
        return paths;
    }

    public void sreachPaths(TreeNode root, List<String> paths, String path) {
        
        if(root != null) {
            path += Integer.toString(root.val);
            if(root.left == null && root.right == null) {
                paths.add(path);
            }else {
                path += "->";
                sreachPaths(root.left, paths, path);
                sreachPaths(root.right, paths, path);
            }

        }
    }
}

执行结果

posted @ 2020-07-17 15:11  梧桐更兼细雨_到黄昏  Views(397)  Comments(0Edit  收藏  举报