youngyangyang04 / leetcode-master-comment

用来做评论区
0 stars 0 forks source link

[Vssue]0257.二叉树的所有路径.md #71

Open youngyangyang04 opened 5 months ago

youngyangyang04 commented 5 months ago

https://www.programmercarl.com/0257.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%89%80%E6%9C%89%E8%B7%AF%E5%BE%84.html

Du1in9 commented 4 months ago
class Solution {
    public List<String> binaryTreePaths(TreeNode root) {
        List<String> paths = new ArrayList<>();
        traverse(root, "", paths);
        return paths;
    }
    private void traverse(TreeNode node, String path, List<String> paths) {
        path += node.val;
        if (node.left == null && node.right == null) {
            paths.add(path);
        } else {
            path += "->";
            if (node.left != null) {    // 递归左子树
                traverse(node.left, path, paths);
            }
            if (node.right != null) {   // 回溯, 递归右子树
                traverse(node.right, path, paths);
            }
        }
    }
}
djsjznsn commented 1 month ago

class Solution { public List binaryTreePaths(TreeNode root) { List result=new ArrayList<>(); if(root==null) {//空结点,直接返回空集合 return result; } if(root.left==null&&root.right==null) {//叶节点 result.add(root.val+""); } else { result.addAll(binaryTreePaths(root.left)); result.addAll(binaryTreePaths(root.right)); result = result.stream().map(s -> root.val +"->"+ s).collect(Collectors.toList()); } return result; } } 请问这么写为什么不行,也是递归

ExcitedSpider commented 1 week ago

贡献一个好玩的版本:

  public List<String> binaryTreePaths(TreeNode node) {
    if (node == null)
      return List.of();
    if (node.left == null && node.right == null) {
      return List.of(Integer.toString(node.val));
    } else {
      var lpaths = binaryTreePaths(node.left);
      var rpaths = binaryTreePaths(node.right);

      return Stream
          .concat(lpaths.stream(), rpaths.stream())
          .map(str -> node.val + "->" + str)
          .toList();
    }
  }