diff --git a/problems/0257.二叉树的所有路径.md b/problems/0257.二叉树的所有路径.md index d0c190a0..68434479 100644 --- a/problems/0257.二叉树的所有路径.md +++ b/problems/0257.二叉树的所有路径.md @@ -34,7 +34,7 @@ ## 递归 -1. 递归函数函数参数以及返回值 +1. 递归函数参数以及返回值 要传入根节点,记录每一条路径的path,和存放结果集的result,这里递归不需要返回值,代码如下: @@ -259,7 +259,7 @@ if (cur->right) { path.pop_back(); // 回溯 '>' path.pop_back(); // 回溯 '-' } -``` +``` 整体代码如下: @@ -395,33 +395,34 @@ class Solution { * 递归法 */ public List binaryTreePaths(TreeNode root) { - List res = new ArrayList<>(); + List res = new ArrayList<>();// 存最终的结果 if (root == null) { return res; } - List paths = new ArrayList<>(); + List paths = new ArrayList<>();// 作为结果中的路径 traversal(root, paths, res); return res; } private void traversal(TreeNode root, List paths, List res) { - paths.add(root.val); - // 叶子结点 + paths.add(root.val);// 前序遍历,中 + // 遇到叶子结点 if (root.left == null && root.right == null) { // 输出 - StringBuilder sb = new StringBuilder(); + StringBuilder sb = new StringBuilder();// StringBuilder用来拼接字符串,速度更快 for (int i = 0; i < paths.size() - 1; i++) { sb.append(paths.get(i)).append("->"); } - sb.append(paths.get(paths.size() - 1)); - res.add(sb.toString()); + sb.append(paths.get(paths.size() - 1));// 记录最后一个节点 + res.add(sb.toString());// 收集一个路径 return; } - if (root.left != null) { + // 递归和回溯是同时进行,所以要放在同一个花括号里 + if (root.left != null) { // 左 traversal(root.left, paths, res); paths.remove(paths.size() - 1);// 回溯 } - if (root.right != null) { + if (root.right != null) { // 右 traversal(root.right, paths, res); paths.remove(paths.size() - 1);// 回溯 } @@ -794,7 +795,7 @@ object Solution { } } ``` - + rust: ```rust @@ -826,3 +827,4 @@ impl Solution { +