前言:
经过这几天 感觉递归的套路好像都一样 虽然现在递归思想明白了 但还是不太会用 这篇博客记录一下这几天的递归套路
例题:
AC:
package 二叉树;
public class 二叉树的镜像 {
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
public TreeNode mirrorTree(TreeNode root) {
if(root==null){
return null;
}
TreeNode left=mirrorTree(root.left);
TreeNode right=mirrorTree(root.right);
root.left=right;
root.right=left;
return root;
}
}
总结:
1 首先有返回值的递归中 通常都是return null
2 然后接下来一句有可能会有逻辑代码例如:
如果有累加计数器的话,就需要在每一层递归之前先清空
如下图的逻辑代码为左右子树吊递归之前执行(由于它是从根开始访问 类似先序遍历 所以逻辑代码放在这)
如下图的逻辑代码放在了左右子树递归之后:(因为这个递归逻辑是自下而上 结果是逐渐累加,最终累加到根节点 有点后序遍历的感觉)