对称二叉树

2022-04-27  本文已影响0人  曾大稳丶

题目链接:https://leetcode-cn.com/problems/symmetric-tree/

image.png

题目解析
核心是判断这个二叉树的左右节点对应的值是否相等,left.right==right.left && left.left == right.right就意味着是符合规则的二叉树。

  1. 采用递归的思路进行判断
public boolean isSymmetric(TreeNode root) {
        return check(root.left,root.right);
    }

    private boolean check(TreeNode left,TreeNode right){
        //判断到底
        if (left == null && right ==null){
            return true;
        }
       // 表示不符合规则
        if (left ==null || right ==null){
            return false;
        }
      // 不符合规则
        if (left.val != right.val){
            return false;
        }
        //left.right==right.left && left.left == right.right 判断
        return check(left.left,right.right) && check(left.right,right.left);
    }

复杂度分析
空间复杂度: O(N)。
时间复杂度: O(N)。

  1. 采用递归加辅助队列的方式进行处理
public boolean isSymmetric(TreeNode root) {
        return check(root.left,root.right);
    }

    private boolean check(TreeNode left,TreeNode right){
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(left);
        queue.offer(right);
        while (!queue.isEmpty()){
            TreeNode p = queue.poll();
            TreeNode q = queue.poll();

            //某一个节点到底了
            if (p == null && q == null){
                continue;
            }

            if (p==null || q ==null){
                return false;
            }
            if (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)。

上一篇下一篇

猜你喜欢

热点阅读