leetcode #### 257. 二叉树的所有路径
此题涉及的点有StringBuffer(不会),对bfs的理解
// public List<String> process(TreeNode root,TreeNode node,String str,List<String> res){
// if(root==null){
// return null;
// }
// //叶子节点,优先特殊拼接
// if(root.left==null && root.right==null){
// str+=""+root.val;
// res.add(str);
// return res;
// }
// str+=""+root.val+"->"; //拼接
// if(root.val==node.val) str=""+root.val+"->"; //递归回来要置空
// process(root.left,root,str,res);
// process(root.right,root,str,res);
// return res;
// }
其实这样写已经是对bfs的不理解了,当我递归回来时还要额外传递辅助根节点来单独判断,这一步完全是没必要的。
因为回溯就是先左再右,递归遍历完会左节点后,对应你所传递的参数也会对应原来的参数就是1,而不要回溯回来时将字符串置空
public static List<String> binaryTreePaths(TreeNode root,StringBuffer str,List<String> res) {
if(root==null){
return null;
}
str.append(root.val);
if(root.left==null && root.right==null) {
res.add(str.toString());
return res;
}
binaryTreePaths(root.left,new StringBuffer(str).append("->"),res); //遍历完左子树,str就是第一调用函数的值就是1,而不要再次额外判断
binaryTreePaths(root.right,new StringBuffer(str).append("->"),res);
return res;
}