刷题专栏(五):对称二叉树

简介: 刷题专栏(五):对称二叉树

前言

今天的这道题《对称二叉树》,难度处于简单层次,主要考察的是对二叉树数据结构的理解以及如何使用递归的概念。image.png

算法题:对称二叉树

对称二叉树这道题目的描述很少,将要实现的目的很直接的传达给了大家。

那就是验证一个二叉树是否存在轴对称的情况,也就是判断是否左右对称。

我们可以通过题目给出的示例1就能看出来,

逻辑思路有了,那么如何通过代码来实现呢,大概一想,必然要使用递归概念。

一直递归到二叉树的最底层。

而且从一开始,二叉树的左右两边就已经分开了,所以只需要在递归代码体中判断即可。

不过有一个特殊情况,那就是对称的概念,不是两边的左节点对应左节点,而是左节点对应右节点才能称之为对称。

代码展示

这就是我的执行代码了,通过递归is方法来实现多个节点的判断,直到递归到最后一层为止。

/**
 * 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) {
        TreeNode left = root.left;
        TreeNode right = root.right;
        return is(left, right);
    }
    private boolean is(TreeNode left, TreeNode right){
        if(left == null && right == null){
            return true;
        }else if(left == null || right == null){
            return false;
        }
        if(left.val != right.val){
            return false;
        }else{
            return is(left.left, right.right) && is(left.right, right.left);
        }
    }
}

执行结果:

这道题的执行结果还是比较满意的,递归好使。

image.png

总结

本道题主要涉及数据结构二叉树和递归的概念,在比对的期间也很简单,大家还是可以去做一下这道题的。

Zh12138
+关注
目录
打赏
0
0
0
0
2
分享
相关文章
|
9月前
力扣面试经典题之二叉树
力扣面试经典题之二叉树
57 0
|
9月前
|
六六力扣刷题二叉树之对称二叉树
六六力扣刷题二叉树之对称二叉树
102 1
|
9月前
|
刷题专栏(十三):二叉搜索树的最近公共祖先
刷题专栏(十三):二叉搜索树的最近公共祖先
48 0
代码随想录算法训练营第十四天 | LeetCode 102. 二叉树的层序遍历、LeetCode 226. 翻转二叉树、LeetCode 101. 对称二叉树
代码随想录算法训练营第十四天 | LeetCode 102. 二叉树的层序遍历、LeetCode 226. 翻转二叉树、LeetCode 101. 对称二叉树
66 0
牛客网《剑指offer》专栏刷题练习之双指针算法的使用
牛客网《剑指offer》专栏刷题练习之双指针算法的使用
118 0
牛客网《剑指offer》专栏刷题练习之掌握动态规划思想
牛客网《剑指offer》专栏刷题练习之掌握动态规划思想
137 0
【C++算法图解专栏】一篇文章带你掌握尺取法(双指针)
【C++算法图解专栏】一篇文章带你掌握尺取法(双指针)
267 0
剑指Offer - 面试题28:对称的二叉树
剑指Offer - 面试题28:对称的二叉树
81 0
刷题算法:快慢指针法
快慢指针法指的就是操作数组、链表及字符串等使用两个起点相同但前进步数不同的指针。相对于利用多次循环解决问题,快慢指针法的时间复杂度较低,执行效率高。对于快慢指针法根据题目可供调整的无非就为两点: 起点 前进步数 快慢指针法起点位置的选择通常是采取一个 if else 语句进行判断,而在未达到正确起点位置时,两个指针的前进步数将保持一致。而实现快慢指针前进步数不一致移动的方法通常是采取一个 for 循环进行移动指针,注意越界问题。此处 for 循环迭代有两种方案: 既可以设置快慢指针的步数一致,再在 i
136 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等