对称二叉树
最编程
2024-10-15 07:22:48
...
题目要求
给你一个二叉树的根节点 root
, 检查它是否轴对称。
提示:
- 树中节点数目在范围
[1, 1000]
内 -100 <= Node.val <= 100
破题思路
利用递归来确定两个对称的点是不是值相等(包含null的情况),如果是的话,选择当前递归层的节点的下一层对应的对称节点作为参数进入递归。而每一递归层的任务就是判断当前递归层的两个参数节点的值是否相等。
那什么是当前递归层的下一层的对应节点呢?
- L.left.val = R.right.val :即 L 的 左子节点 和 R 的 右子节点 对称。
- L.right.val = R.left.val :即 L 的 右子节点 和 R 的 左子节点 对称。
代码实现
带注释的代码实现如下
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public boolean isSymmetric(TreeNode root) {
// 从这里开始,假如根节点为空,返回true
if (root == null) {
return true;
}
// 进入主方法
return recur(root.left, root.right);
}
boolean recur(TreeNode Left, TreeNode Right) {
//首先判断左右节点是否为空,如果是,则返回真
//说明当前入参的左右节点对称
//也说明L,R同时越过叶子结点,此树从顶到底的节点都对称,因此返回true
if (Left == null && Right == null) {
return true;
}
//当L或者R中只有一个越过叶子节点,另一个没有,则不对称。
//当L不等于R时,不对称。
if (Left == null || Right == null || Left.val != Right.val) {
return false;
}
//取当前递归层2个节点的下一层的对称子节点,新起下一递归层
return recur(Left.left, Right.right) && recur(Left.right, Right.left);
}
}
手写解析
推荐阅读
-
揭开二叉树的神秘面纱:链式实现解析
-
对称二叉树
-
二叉树的遍历
-
数据结构-5.6.二叉树的首阶、中阶和尾阶遍历
-
语言 c:创建二叉树、前序遍历、中间遍历、后续遍历
-
数据结构(二叉树)
-
Python+Matplotlib 奇偶函数可视化的简单示例 - 奇异函数 定义:如果对于定义域中的任意 x,存在 f(-x) = -f(x),则称 f(x) 为奇异函数。奇函数的特征奇函数的图象与原点对称。
-
高级数据结构]深入探索二叉树:二叉搜索树概念及其高效实现 - II.
-
学习记录:JS 算法 (51):计算二叉树中好节点的数量
-
探索二叉树、红黑树、递归树、堆和堆排序的数据结构与算法(第四部分),以及堆的实际应用