leetcode刷题题解——101. 对称二叉树

这篇博客介绍了如何使用递归和迭代两种方法来判断一棵二叉树是否对称。递归版本通过比较根节点的左右子树对称性,并递归检查子节点对称性。迭代版本利用层次遍历,通过队列存储并对比对称位置的节点。两种方法在遇到不对称情况时都会立即返回false,否则继续检查直至遍历完整棵树。
摘要由CSDN通过智能技术生成

递归版本

public boolean isSymmetric(TreeNode root) {
    if(root==null) return true;
    TreeNode left = root.left;
    TreeNode right = root.right;
    if (left==null&&right==null) return true;
    else if (left==null||right==null) return false;

    if (left.val!=right.val)  return false;
    return isSymmetric(left.left,right.right)&&isSymmetric(left.right,right.left);
}

private boolean isSymmetric(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;
    return isSymmetric(left.left,right.right)&&isSymmetric(left.right,right.left);
}

思路:基于前序遍历的对称判断

  • 在主函数先对根下的左右子树进行对称判断,如果不对称,直接返回false,如果对称,要继续往下走进子函数的递归
  • 到最后一个return语句,说明当前结点都是符合对称的,那么return的结果就要看接下来的子树是否符合,即对称位置子树的值是否相等

迭代版本

public boolean isSymmetric(TreeNode root) {
    Queue<TreeNode> queue = new LinkedList<>();
    TreeNode left =root, right =root;
    queue.offer(left);
    queue.offer(right);
    while (!queue.isEmpty()){
        left = queue.poll();
        right = queue.poll();
        if (left ==null&& right ==null)  continue;
        if (left ==null|| right ==null|| left.val!= right.val) return false;
        queue.offer(left.left);
        queue.offer(right.right);

        queue.offer(left.right);
        queue.offer(right.left);
    }
    return true;
}

思路:基于利用队列进行层次遍历进行对称判断

  • 循环之前需要先将root存进队列两次,使其结构一致
  • 弹出需要判断对称的两个结点,如果都为null直接进行下一次循环,不符合对称直接返回false,到最后两个结点均不为null,将对称的结点两两配对存进队列,可类比递归方案的最后一个return语句
  • 循环结束,没有出现不对称情况,返回true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绿豆蛙给生活加点甜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值