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());
    }
}
原文:https://www.cnblogs.com/ging/p/14265222.html