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

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

题目

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

例如,二叉树 [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
q = new LinkedList
(); 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名企之路

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

你可能感兴趣的文章
由莫名其妙的错误开始---浅谈jquery的dom节点创建
查看>>
磨刀-CodeWarrior11生成的Makefile解析
查看>>
String StringBuffer StringBuilder对比
查看>>
bootstrap随笔点击增加
查看>>
oracle 中proc和oci操作对缓存不同处理
查看>>
[LeetCode] Spiral Matrix 解题报告
查看>>
60906磁悬浮动力系统应用研究与模型搭建
查看>>
指纹获取 Fingerprint2
查看>>
面试题目3:智能指针
查看>>
取消凭证分解 (取消公司下的多个利润中心)
查看>>
flask ORM: Flask-SQLAlchemy【单表】增删改查
查看>>
vim 常用指令
查看>>
nodejs 获取自己的ip
查看>>
Nest.js 处理错误
查看>>
你好,C++(16)用表达式表达我们的设计意图——4.1 用操作符对数据进行运算...
查看>>
18.3 redis 的安装
查看>>
jdbc 简单连接
查看>>
Activiti 实战篇 小试牛刀
查看>>
java中的Static class
查看>>
[工具类]视频音频格式转换
查看>>