判断二叉树是否对称

对称的二叉树

http://www.nowcoder.com/questionTerminal/ff05d44dfdb04e1d83bdbdab320efbcb

递归

1. 分析

不对称的条件:结点X的左右子树不对称,包括左右子树某一个为null,左右孩子的val不同,左孩子的左子树与右孩子的右子树不对称等等
递归的base case是假设知道左右两个子树是否为null、根以及左右子树是否对称。

2. 代码

public class Solution {
    boolean isSymmetrical(TreeNode pRoot)
    {
        if(pRoot == null){
            return true;
        }
        return check(pRoot.left, pRoot.right);
    }
    public boolean check(TreeNode left, TreeNode right){
        if(left== null && right == null){
            return true;
        }else if((left == null || right == null) || (left.val != right.val)){
            return false;
        }
        return check(left.left, right.right)&&check(left.right, right.left);

    }
}

3. 复杂度

时间:O(n)
空间:O(n)

非递归

2.1 分析

广度优先遍历,辅助队列,对称的节点成对入队和出队,出队判断是否对称。深度优先的方法同理,只需要修改出栈时接收的顺序。

2.2 代码

import java.util.*;
public class Solution {
    boolean isSymmetrical(TreeNode pRoot)
    {
        if(pRoot == null || (pRoot.left == null && pRoot.right == null)){
            return true; 
        }
        Queue<TreeNode> q = new LinkedList<>();
        q.offer(pRoot.left);
        q.offer(pRoot.right);
        TreeNode left = null;
        TreeNode right = null;
        while(!q.isEmpty()){
            left = q.poll();
            right = q.poll();
            if(left==null && right == null){
                continue;
            }else if(left==null || right == null){
                return false;
            }
            if(left.val != right.val){
                return false;
            }
            q.offer(left.left);
            q.offer(right.right);
            q.offer(left.right);
            q.offer(right.left);
        }
        return true;
    }
}

2.3 复杂度

时间:O(n)
空间:O(n)

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 一张图晒出你司的标语 #
4401次浏览 77人参与
# 找AI工作可以去哪些公司? #
9509次浏览 255人参与
# 米连集团26产品管培生项目 #
13428次浏览 285人参与
# 你的实习产出是真实的还是包装的? #
20489次浏览 343人参与
# AI面会问哪些问题? #
28438次浏览 572人参与
# 春招至今,你的战绩如何? #
66746次浏览 588人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
15481次浏览 223人参与
# 从事AI岗需要掌握哪些技术栈? #
9382次浏览 329人参与
# 中国电信笔试 #
32126次浏览 295人参与
# 你做过最难的笔试是哪家公司 #
34705次浏览 253人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
341033次浏览 2175人参与
# 金三银四,你的春招进行到哪个阶段了? #
22379次浏览 284人参与
# 同bg的你秋招战况如何? #
212250次浏览 1121人参与
# 哪些公司真双非友好? #
69755次浏览 289人参与
# 如何准备秋招 #
78315次浏览 868人参与
# 阿里笔试 #
179152次浏览 1318人参与
# 机械人避雷的岗位/公司 #
62713次浏览 393人参与
# 小马智行求职进展汇总 #
25149次浏览 80人参与
# 第一份工作一定要去大厂吗 #
14992次浏览 122人参与
# 担心入职之后被发现很菜怎么办 #
291406次浏览 1210人参与
# 为了减少AI幻觉,你注入过哪些设定? #
26297次浏览 310人参与
# 应届生第一份工资要多少合适 #
20707次浏览 86人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务