博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【LeetCode】101. 对称二叉树
阅读量:2004 次
发布时间:2019-04-28

本文共 2230 字,大约阅读时间需要 7 分钟。

题目描述

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

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

进阶:

  • 你可以运用递归迭代两种方法解决这个问题吗?

题解思路

阅读完题目,脑子里先是想到了这种数据结构。

栈的一个特性:先进后出、后进先出。

根据这个特性,很容易地搞定递归实现。

但是迭代地话,用队列更容易理解。

队列的一个特性:先进先出,后进后出。

这题比较容易,直接看代码和注释即可。

递归

class Solution {
public boolean isSymmetric(TreeNode root) {
// 两树都为null,肯定对称 if (root == null) {
return true; } // 比较 左子树root.left 与 右子树root.right 这两棵子树是否对称 return compareTree(root.left, root.right); } /* 递归实现 */ private boolean compareTree(TreeNode node1, TreeNode node2) {
// 首先比较 node1 与 node2 这两个节点的值是否相等 // 两节点均同时为null时 if (node1 == null && node2 == null) {
return true; } // 最多一个节点为null时,当然还得考虑“值不空但不同”的情况 if (node1 == null || node2 == null || node1.val != node2.val) {
// TreeNode.val返回的是该节点的值 return false; } // 再递归比较 node1 的左子树与 node2 的右子树是否对称,node1 的右子树与 node2 的左子树是否对称 return compareTree(node1.left, node2.right) && compareTree(node1.right, node2.left); }}

迭代

class Solution {
public boolean isSymmetric(TreeNode root) {
// 两树都为null,肯定对称 if (root == null) {
return true; } Queue
queue = new LinkedList<>(); queue.add(root.left); queue.add(root.right); while (!queue.isEmpty()) {
// 每次出队两个节点 node1 和 node2 TreeNode node1 = queue.poll(); TreeNode node2 = queue.poll(); // 首先比较 node1 与 node2 这两个节点的值是否相等 if (node1 == null && node2 == null) {
continue; } // 最多一个节点为null时,当然还得考虑“值不空但不同”的情况 if (node1 == null || node2 == null || node1.val != node2.val) {
// TreeNode.val返回的是该节点的值 return false; } // 再将 node1 的左节点与 node2 的右节点一起入队(以便两节点一起出队,进行比较) queue.add(node1.left); queue.add(node2.right); // 再将 node1 的右节点与 node2 的左节点一起入队(以便两节点一起出队,进行比较) queue.add(node1.right); queue.add(node2.left); } return true; }}

复杂度分析

无论是递归,还是迭代,

时间复杂度均为:O(n)

空间复杂度均为:O(n)

补充

转载地址:http://fmatf.baihongyu.com/

你可能感兴趣的文章
location区段
查看>>
linux内存的寻址方式
查看>>
how2heap-double free
查看>>
tf keras SimpleRNN源码解析
查看>>
MyBatisPlus简单入门(SpringBoot)
查看>>
xss-labs详解(上)1-10
查看>>
xss-labs详解(下)11-20
查看>>
攻防世界web进阶区ics-04详解
查看>>
欧拉角(Euler angle) & 万向节死锁(Gimbal Lock) & 四元数(Quaternion)
查看>>
Linux png转jpg (convert命令)
查看>>
CodeForces - 456C Boredom (dp)
查看>>
CodeForces - 1042B Vitamins (思维)
查看>>
ACM 2013 长沙区域赛 Collision (几何)
查看>>
ACM 2014 鞍山区域赛 E - Hatsune Miku (dp)
查看>>
反向传播&梯度下降 的直观理解程序(numpy)
查看>>
ACM 2017 北京区域赛 J-Pangu and Stones(区间dp)
查看>>
java常用类 String面试题
查看>>
四线触摸屏原理
查看>>
C/C++如何返回一个数组/指针
查看>>
腾讯AI语音识别API踩坑记录
查看>>