递归
如何去描述这个算法:自己调用自己 调用栈。
- 每次的参数一样。
- 需要有终结条件。
- 每次递归中的变量,不影响。当然可以在方法中过加入一个全局变量。
条件
一个递归需要在正确的时候终结。这就是基线条件 ,与之相反的就是递归条件 。
题目leetcode 101
判断一棵二叉树是不是对称二叉树?
如图:
判断对称二叉树的关键点先找清楚:
- 左边树的左节点等于右边树的右节点,左边树的右节点等于右边树的左节点。
调用栈
理解一下递归的调用栈,在这题中的展示。
写一个方法FX() ,它有两个参数分别是左节点,右节点。下面依此入栈,出栈。
代码
/**
* Definition for a binary tree node.
* 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;
* }
* }
*/
class Solution {
public boolean isSymmetric(TreeNode root) {
return isTrue(root.left,root.right);
}
public boolean isTrue(TreeNode l,TreeNode r) {
//结束递归条件
if (l == null && r == null) {
return true;
};
//结束递归条件
if (l == null || r == null) {
return false;
};
//递归条件
return l.val==r.val && isTrue(l.left,r.right) && isTrue(l.right,r.left);
}
}