算法与数据结构-树-简单-二叉树的所有路径

二叉树的所有路径

题目

leetcode原题:257. 二叉树的所有路径

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

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

分析

二叉树的问题,还是遍历的问题。

考虑题目的要求,每经过一个节点,要把自己加入到链条中,然后走到下一个节点,自然而然可以想到前序遍历

每次递归都需要获取上一步节点的链路String,如果走到了叶子节点,可以直接把链路加入到resultList中,并返回。

这样大框架就出来了!

优化点:方法内部可以使用StringBuilder来进行字符串拼接。

原本我写的是字符串相加,跑出来需要10ms,改成StringBuilder后,跑结果只需要1ms。

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {

    private List<String> resultList = new ArrayList<>();

    public List<String> binaryTreePaths(TreeNode root) {
        dfs(root,"");
        return resultList;
    }

    private void dfs(TreeNode root,String lastStr){
        if(root == null){
            return;
        }

        StringBuilder sb = new StringBuilder(lastStr);
        sb.append(root.val);
        
        if(root.left == null && root.right == null){
            resultList.add(sb.toString());
            return;
        }
        sb.append("->");
        dfs(root.left,sb.toString());
        dfs(root.right,sb.toString());
    }
}
posted @ 2021-01-12 08:02  Ging  阅读(166)  评论(0编辑  收藏  举报