LeetCode 101. 对称二叉树

233 阅读2分钟

题意

给定一个二叉树,检查它是否是镜像对称的。

说明:如果你可以运用递归和迭代两种方法解决这个问题,会很加分。

示例


例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

    1
   / \
  2   2
 / \ / \
3  4 4  3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

    1
   / \
  2   2
   \   \
   3    3

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/symmetric-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解答与思路

1 - 递归方法

递归结束条件:
- 都为空指针则返回 true
- 只有一个为空则返回 false
递归过程:
- 判断两个指针当前节点值是否相等
- 判断 A 的右子树与 B 的左子树是否对称
- 判断 A 的左子树与 B 的右子树是否对称
短路:
- 在递归判断过程中存在短路现象,也就是做 与 操作时,如果前面的值返回 false 则后面的不再进行计算


/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public boolean isSymmetric(TreeNode root) {
        if(root == null)  return true;
         return dfs(root.left, root.right);
        
    }
    boolean dfs(TreeNode l, TreeNode r){
        if(l == null && r == nullreturn true;
        if(l == null || r == null ) return false;
        if(l.val != r.val) return false;
        return dfs(l.left, r.right) && dfs( l.right, r.left);
    }
}