LeetCode 257 二叉数的所有路径
List<String> ans = new ArrayList<>();
public List<String> binaryTreePaths(TreeNode root) {
this.dfs(root,"");
return ans;
}
public void dfs(TreeNode root,String temp){
if(root == null)
return;
if(root.left == null && root.right == null){
temp += root.val;
ans.add(temp);
}else{
temp += root.val+"->";
dfs(root.left,temp);
dfs(root.right,temp);
}
}
深度优先搜索的理解
**1.**深度优先搜索会遍历二叉树的所有结点(终止结点可能是叶子结点的左节点或者右节点,即null,这个看个人代码的边界条件)如:
if(root == null)
return;
这段代码便是在叶子结点的左右结点终止遍历,也是绝大多是的情况下的终止条件
if(root.left == null && root.right == null)
这个代码便是叶子结点终止
2.每个结点只遍历一次(与回溯不同,回溯往往得通过vis[]数组来控制不要反复访问结点)
代码详解
if(root == null)
return;
深度优先搜索时搜索到边界结点时候如何处理,通常情况下为return
if(root.left == null && root.right == null){
temp += root.val;
ans.add(temp);
}
对叶子结点的处理,本题对叶子结点有特殊要求,一般情况下不需要这样处理
temp += root.val+"->";
对常规结点的处理
dfs(root.left,temp);
dfs(root.right,temp);
递归,依次遍历所有结点
对每次访问结点dfs方法需要传递的参数
通常情况下,对每个结点访问的时候,都要保留一些当前结点的信息,并传递给下一个要访问结点,这样在方法中便多了额外的参数,本题中便是String temp,每次访问一个结点就将结点值添加到temp中,并在访问下一个结点的时候传递过去,如dfs(root.left,temp)
dfs(root.right,temp)