257. 二叉树的所有路径 DFS回溯法

257. 二叉树的所有路径

难度:简单
题目描述
257. 二叉树的所有路径 DFS回溯法_第1张图片
解题思路

/*
	   * 257. 二叉树的所有路径
	   * 2020/6/17
	   */
	  public List<String> binaryTreePaths(TreeNode root) {
		  List<String> re = new LinkedList<>();
		  if(root == null)
			  return re;
		  pathHelper(root, re, "");
		  return re;
		  
	    }
	  public void pathHelper(TreeNode root,List<String> re,String path) {
		  if(root == null)
			  return;
		  path += String.valueOf(root.val);
		  if(root.left == null && root.right == null) { //到达叶子节点,添加到路径
			  re.add(path);
			  return;
		  }
		  path += "->";
		  pathHelper(root.left,re,path);
		  pathHelper(root.right,re,path);
		  
	  }

257. 二叉树的所有路径 DFS回溯法_第2张图片
一开始用StringBuilder写的,但是总是很多细节不对,然后看评论发现这一条~
257. 二叉树的所有路径 DFS回溯法_第3张图片

然后改了改,保存当前builder 的长度,当需要回溯的时候,删掉上一个长度和现在长度中间的部分

public List<String> binaryTreePaths(TreeNode root) {
	        List<String> res = new LinkedList<>();
	        recursion(root, new StringBuilder(), res);
	        return res;
	    }

	    public void recursion(TreeNode root, StringBuilder sb, List<String> res) {
	    	if(root == null)
	    		return;
	    	sb.append(root.val);
	    	if(root.left == null && root.right == null) {
	    		res.add(sb.toString());
	    		return;
	    	}
	    	sb.append("->");
	    	int lenght = sb.length(); //记录下现在sb的长度
	    	recursion(root.left, sb, res);
	    	sb.delete(lenght, sb.length());  //去除上一个状态
	    	recursion(root.right, sb, res);
	    }

257. 二叉树的所有路径 DFS回溯法_第4张图片

你可能感兴趣的:(力扣刷题笔记)