重庆装修公司哪家最好,seo1新地址在哪里,wordpress怎样发布,怎样学好动漫制作专业回溯很大感觉就是多重递归#xff0c;在递归的题目中#xff0c;例如斐波那契数列#xff0c;只需要考虑当前情况以及他的子情况。而在回溯中#xff0c;要进行很多次递归#xff0c;并且要对条件进行处理。
LeetCode257:给你一个二叉树的根节点root,按任意顺序#xff…回溯很大感觉就是多重递归在递归的题目中例如斐波那契数列只需要考虑当前情况以及他的子情况。而在回溯中要进行很多次递归并且要对条件进行处理。
LeetCode257:给你一个二叉树的根节点root,按任意顺序返回所有从根节点到叶子节点的路径。
叶子节点是指没有子节点的节点。
示例 输入root[1,2,3,nu11,5] 输出[1-2-51-3]
class BinaryTreePaths {ListString ans new ArrayList();public ListString binaryTreePaths(TreeNode root) {dfs(root, new ArrayList());return ans;}private void dfs(TreeNode root, ListInteger temp) {if (root null) return;temp.add(root.val);// 如果是叶子节点记录结果if (root.left null root.right null) {ans.add(getPathString(temp));}dfs(root.left, temp);dfs(root.right, temp);temp.remove(temp.size() - 1);}// 拼接结果private String getPathString(ListInteger temp) {StringBuilder sb new StringBuilder();sb.append(temp.get(0));for (int i 1; i temp.size(); i) {sb.append(-).append(temp.get(i));}return sb.toString();}
}
进入dfs将当前节点添加到temp列表中如果是叶子节点那说明当前分支已经处理完了像结果列表中添加拼接后的temp列表。
如果不是叶子节点那么就遍历左子树右子树按照前序的顺序来回溯注意在当前分支结束后要将最下面的那个节点去掉。