257. 二叉树的所有路径
难度:简单
给你一个二叉树的根节点 root
,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
叶子节点 是指没有子节点的节点。
思路
使用迭代法,从根节点开始到叶节点结束,利用StringBuilder
记录下当前路径,发现到叶节点后将该路径加入到返回的List
中
注意:在使用StringBuilder
记录路径时候需要注意传入子程序的StringBuilder
是当前StringBuilder
的拷贝,因为传入的参数是引用类型,如果直接将原来的传入会导致结果返回的List中所有元素都是一样的
package cn.edu.xjtu.carlWay.tree.binaryTreePath;
import cn.edu.xjtu.Util.TreeNode.TreeNode;
import java.util.ArrayList;
import java.util.List;
/**
* 257. 二叉树的所有路径
* 给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
* <p>
* 叶子节点 是指没有子节点的节点。
* <p>
* https://leetcode-cn.com/problems/binary-tree-paths/
*/
public class Solution {
public List<String> binaryTreePaths(TreeNode root) {
if (root == null) {
return null;
}
List<String> paths = new ArrayList<>();
StringBuilder path = new StringBuilder();
findPath(root, path, paths);
return paths;
}
private void findPath(TreeNode node, StringBuilder path, List<String> paths) {
if (node != null) {
StringBuilder temp_path = new StringBuilder(path);
temp_path.append(node.val);
if (node.left == null && node.right == null) {
paths.add(temp_path.toString());
} else {
temp_path.append("->");
findPath(node.left, temp_path, paths);
findPath(node.right, temp_path, paths);
}
}
}
}