力扣-101 递归

126 阅读1分钟

递归

如何去描述这个算法:自己调用自己 调用栈。

  1. 每次的参数一样。
  2. 需要有终结条件。
  3. 每次递归中的变量,不影响。当然可以在方法中过加入一个全局变量。

条件

一个递归需要在正确的时候终结。这就是基线条件 ,与之相反的就是递归条件

题目leetcode 101

判断一棵二叉树是不是对称二叉树?

如图:

02

判断对称二叉树的关键点先找清楚:

  1. 左边树的左节点等于右边树的右节点,左边树的右节点等于右边树的左节点。

调用栈

理解一下递归的调用栈,在这题中的展示。

写一个方法FX() ,它有两个参数分别是左节点,右节点。下面依此入栈,出栈。

05

代码

/**
 * 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);
    }
}