二叉树的所有路径
题目
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());
}
}