【Leetcode】101. 对称二叉树

news/2024/11/14 7:06:56

题目

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

例如,二叉树 [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

题解

还记得我们上几次说过,二叉树的题目,大多数可以用递归解决。
而递归主要确定两点:

  • 递归的子问题是什么;
  • 递归的结束条件是什么

这个题这两点都不难找到,直接看代码吧。

/**
 * 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) {
        return root == null || isSymmetricHelp(root.left, root.right);
    }

    private boolean isSymmetricHelp(TreeNode left, TreeNode right) {
        if (left == null || right == null)
            return left == right;
        if (left.val != right.val)
            return false;
        return isSymmetricHelp(left.left, right.right) && isSymmetricHelp(left.right, right.left);
    }
}

这个题目还要求用非递归的方式去解.

一种很直观的想法就是利用层序遍历,看它是不是对称的.

入队顺序依次是, 左子树的左儿子,右子树的右儿子
左子树的右儿子,右子树左右儿子。
这样出队的时候两两检查是不是对称。

public boolean isSymmetric(TreeNode root) {
        Queue<TreeNode> q = new LinkedList<TreeNode>();
        if(root == null) return true;
        q.add(root.left);
        q.add(root.right);
        while(!q.isEmpty()){
            TreeNode left = q.poll();
            TreeNode right = q.poll();
            // 叶子节点.
            if(left== null&& right == null) continue;
            // 其中一个为null 肯定不是
            if(left == null ^ right == null) return false;
            // 值不相同
            if(left.val != right.val) return false;

            q.add(left.left);
            q.add(right.right);
            q.add(left.right);
            q.add(right.left);            
        }
        return true;
    }

热门阅读

  • 技术文章汇总
  • 【Leetcode】100. 相同的树
  • 【Leetcode】98. 验证二叉搜索树
  • 【Leetcode】95~96 不同的二叉搜索树

Leetcode名企之路


http://www.niftyadmin.cn/n/1996618.html

相关文章

PE文件格式详解(上)

Windows NT 3.1引入了一种名为PE文件格式的新可执行文件格式。PE文件格式的规范包含在了MSDN的CD中&#xff08;Specs and Strategy, Specifications, Windows NT File Format Specifications&#xff09;&#xff0c;但是它非常之晦涩。    然而这一的文档并未提供足够的信息…

c语言 设从键盘输入一个整数序列a1,a2,2015山东省C语言版入门

2015山东省C语言版入门1、设从键盘输入一整数的序列&#xff1a;a1, a2, a3&#xff0c; &#xff0c;an,试编写算法实现&#xff1a;用栈结构存储输入的整数&#xff0c;当ai≠-1时&#xff0c;将ai进栈&#xff1b;当ai-1时&#xff0c;输出栈顶整数并出栈。算法应对异常情况…

PE文件格式详解(下)

预定义段    一个Windows NT的应用程序典型地拥有9个预定义段&#xff0c;它们是.text、.bss、.rdata、.data、.rsrc、.edata、.idata、.pdata和.debug。一些应用程序不需要所有的这些段&#xff0c;同样还有一些应用程序为了自己特殊的需要而定义了更多的段。这种做法与MS-D…

c语言多线程入门,如何用C语言实现多线程

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼Windows操作系统&#xff0c;C语言实现多线程&#xff1a;#include #include DWORD APIENTRY ThreadOne ( LPVOID threadArg ){printf ( "线程开始啦&#xff0c;参数是&#xff1a;%s\n" , (char *)threadArg );return …

大段语音转文字的简单方法

随着互联网的快速发展&#xff0c;我们办公中使用软件来解决问题的频率越来越高&#xff0c;这样不仅节省时间&#xff0c;还大大提高了我们的工作效率。我们在办公中有时候为了节省时间&#xff0c;需要将大段的语音转成文字来传送。可是没有好的软件来解决。今天小编就给大家…

c语言实现sha1算法注解,【密码学】SHA1算法实现及详解

1 SHA1算法简介安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息&#xff0c;SHA1会产生一个160位的消息摘要。当接收到消息的时候&#xff0c…

一个票贩子的自白

一个票贩子的自白 首先票肯定不在售票窗口,当然也不在每个代理点. 票都在我们这些人手里面,至于怎么拿到的,大家有兴趣听不? 还有就是春节票价涨还是不涨对广大需要买票回家的人来说没什么实际实际的意义,因为买不上票,何来高低.说来车票不涨价最大的受益者是谁?是贩票卖票…

android 图标资源管理器,Android资源管理器程序

这是一个有图标的文件资源管理器&#xff0c;也许在网上的基于Android的market上有很多比较精美的文件资源管理器&#xff0c;这里我拿这个出来讲并不在于我做的界面如何的精美&#xff0c;而相反我这里的重点并不在界面&#xff0c;我只是想通过这么个列子和大家一起分享Andro…