101. 对称二叉树 - 力扣(LeetCode)

题目描述

给你一个二叉树的根节点 root , 检查它是否轴对称。

题目示例

输入:root = [1,2,2,3,4,4,3]

输出:true

解题思路

首先想清楚,判断对称二叉树要比较的是哪两个节点,要比较的可不是左右节点!

对于二叉树是否对称,要比较的是根节点的左子树与右子树是不是相互翻转的,理解这一点就知道了其实我们要比较的是两个树(这两个树是根节点的左右子树),所以在递归遍历的过程中,也是要同时遍历两棵树。

比较的是两个子树的里侧和外侧的元素是否相等。

本题遍历只能是"后序遍历",因为我们要通过递归函数的返回值来判断两个子树的内侧节点和外侧节点是否相等。

参考代码

java 复制代码
class Solution {
    public boolean isSymmetric(TreeNode root) {
        // 采用后序遍历,因为左右孩子需要给上层返回信息
        return compare(root.left, root.right);
    }

    public boolean compare(TreeNode left, TreeNode right) {
        // 终止条件
        if(left != null && right == null) return false;
        else if(left == null && right != null) return false;
        // 到叶子结点
        else if(left == null && right == null) return true;
        else if(left.val != right.val) return false;
        // 比较外侧
        boolean outside = compare(left.left, right.right);
        // 比较内侧
        boolean inside = compare(left.right, right.left);
        // 综合考虑内外侧
        boolean result = outside && inside;
        return result;
    }
}
相关推荐
2013092416275 小时前
1968年 Hart, Nilsson, Raphael 《最小成本路径启发式确定的形式基础》A* 算法深度研究报告
人工智能·算法
如何原谅奋力过但无声5 小时前
【力扣-Python-滑动窗口经典题】567.字符串的排列 | 424.替换后的最长重复字符 | 76.最小覆盖子串
算法·leetcode
玄冥剑尊6 小时前
贪心算法进阶
算法·贪心算法
玄冥剑尊6 小时前
贪心算法深化 I
算法·贪心算法
52Hz1186 小时前
力扣73.矩阵置零、54.螺旋矩阵、48.旋转图像
python·算法·leetcode·矩阵
BHXDML6 小时前
第一章:线性回归& 逻辑回归
算法·逻辑回归·线性回归
iAkuya7 小时前
(leetcode)力扣100 二叉搜索树种第K小的元素(中序遍历||记录子树的节点数)
算法·leetcode·职场和发展
Remember_9938 小时前
【LeetCode精选算法】滑动窗口专题二
java·开发语言·数据结构·算法·leetcode
Gorgous—l8 小时前
数据结构算法学习:LeetCode热题100-动态规划篇(下)(单词拆分、最长递增子序列、乘积最大子数组、分割等和子集、最长有效括号)
数据结构·学习·算法
北京地铁1号线9 小时前
2.3 相似度算法详解:Cosine Similarity 与 Euclidean Distance
算法·余弦相似度