持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情
前言
今天的这道题《对称二叉树》,难度处于简单层次,主要考察的是对二叉树数据结构的理解以及如何使用递归的概念。
算法题:对称二叉树
对称二叉树这道题目的描述很少,将要实现的目的很直接的传达给了大家。
那就是验证一个二叉树是否存在轴对称的情况,也就是判断是否左右对称。
我们可以通过题目给出的示例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);
}
}
}
执行结果:
这道题的执行结果还是比较满意的,递归好使。
总结
本道题主要涉及数据结构二叉树和递归的概念,在比对的期间也很简单,大家还是可以去做一下这道题的。