【两次过】LeetCode257:二叉树的所有路径

论坛 期权论坛 脚本     
已经匿名di用户   2022-5-29 19:04   842   0

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

* 说明: 叶子节点是指没有子节点的节点。

* 示例:

* 输入:

* 1

* / \

* 2 3

* \

* 5

* 输出: ["1->2->5", "1->3"]

* 解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3


解题思路:

直接暴力DFS。

由于要返回每次的路线,因此需要维护一个额外的path集合来存储沿途走过的节点。每次搜索路过的节点都给丢到path集合中,直到遇到叶子节点了,就把这条路径表示出来存到结果集合中。

需要注意的是,在搜索完一条路后,转而去搜索其他路线时,要回溯还原现场。

class Solution {
    private List<String> res = new ArrayList<>();
    private List<Integer> path = new ArrayList<>();

    public List<String> binaryTreePaths(TreeNode root) {
        dfs(root);

        return res;
    }

    private void dfs(TreeNode root){
        if(root == null)
            return;
        
        path.add(root.val);
        if(root.left == null && root.right == null){
            res.add(collection2String(path));
        }

        dfs(root.left);
        dfs(root.right);
        path.remove(path.size()-1);
    }

    String collection2String(List<Integer> path){
        StringBuilder sb = new StringBuilder();

        for(int i=0; i<path.size(); i++){
            sb.append(path.get(i));
            if(i != path.size()-1){
                sb.append("->");
            }
        }

        return sb.toString();
    }
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP