LeetCode101-对称二叉树

 

非商业,LeetCode连接附上:java

https://leetcode-cn.com/problems/symmetric-tree/this

进入正题。spa

 

题目:.net

给定一个二叉树,检查它是不是镜像对称的。code

 

示例:blog

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。递归

 1 / \ 2 2 / \ / \ 3 4 4 3

可是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:leetcode

 1 / \ 2 2 \ \ 3 3

进阶:get

你能够运用递归和迭代两种方法解决这个问题吗?同步

 

代码实现:

//节点
class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
  
        public TreeNode(int val) {
            this.val = val;
        }
}

//方法一 递归
class Solution {
    public boolean isSymmetric(TreeNode root) {
        
        return check(root, root);

    }

    private boolean check(TreeNode p, TreeNode q) {


        if(p == null && q == null) {
            return true;
        }
        if(p == null || q == null) {
            return  false;
        }
        
        return p.val == q.val && check(p.left, q.right) && check(p.right, q.left);

    }
}
//时间复杂度O(n),空间复杂度O(n)

//方法二 迭代
class Solution {
    public boolean isSymmetric(TreeNode root) {
        
        if(root == null) {
            return true;
        }

        return check(root.left, root.right);

    }

    private boolean check(TreeNode p, TreeNode q) {


        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(p);
        queue.offer(q);
        while (!queue.isEmpty()) {
            p = queue.poll();
            q = queue.poll();
            if(p == null && q == null) {
                continue;
            }
            if((p == null) || (q == null) || (p.val != q.val)) {
                return false;
            }
            queue.offer(p.left);
            queue.offer(q.right);

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

    }
}
//时间复杂度O(n),空间复杂度O(n)

 

分析:

题目中针对“对称二叉树”,要先找出“对称二叉树”的特色;

针对对称二叉树的特色进行递归的终止条件设置以及迭代时节点的存取及比较方式。

 

--End

 

本文同步分享在 博客"黑冰台"(CNBlog)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索