101. Symmetric Tree

Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

 

Solution1:

class Solution {

    public boolean isSymmetric(TreeNode root) {

        return root == null || isSymmetricHelp(root.left, root.right);

    }

    public boolean isSymmetricHelp(TreeNode left, TreeNode right) {

    if (left == null)

    return right == null;

        if (right == null)

    return false;

        if (left.val != right.val) { //left.val不一定有值,所以要避免空指针异常

            return false;

        }

        return isSymmetricHelp(left.left, right.right) && isSymmetricHelp(left.right, right.left);

    }

}

Solution2://使用栈存放TreeNode,

class Solution {

    public boolean isSymmetric(TreeNode root) {

        if (root == null) return true;

        Stack<TreeNode> s = new Stack<>();

        s.push(root.left);

        s.push(root.right);

        while (!s.empty()) {

            TreeNode n1 = s.pop();

            TreeNode n2 = s.pop();

            if (n1 == null && n2 == null) continue;

            if (n1 == null || n2 == null || n1.val != n2.val) {

                return false; //上边的if已经考虑了n1和n2都是null了,所以如果上述if条件不满足且n1或n2又出现                                           null,那么肯定是一个null一个有数值,所以返回false

            }

            stack.push(n1.left);

            stack.push(n2.right);

            stack.push(n1.right);

            stack.push(n2.left);

       }

        return true;

}

posted @   MarkLeeBYR  阅读(89)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示