[剑指 Offer 28. 对称的二叉树]

剑指 Offer 28. 对称的二叉树

请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。

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

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

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

 1
/ \
2  2
 \  \
 3   3

示例 1:

输入:root = [1,2,2,3,4,4,3]
输出:true
示例 2:

输入:root = [1,2,2,null,3,null,3]
输出:false

限制:

0 <= 节点个数 <= 1000

做题思路:

针对此对称二叉树还是可以采用递归的方法来解题,代码如下:

class Solution {
        public boolean isSymmetric(TreeNode root) {
            return root == null ? true : recur(root.left, root.right);
        }

        boolean recur(TreeNode L, TreeNode R) {
            if (L == null && R == null)
                return true;
        /*
        if (L != null && R == null) {
            return false;
        }
        if (L == null && R != null) {
            return false;
        }
        if (L.val != R.val) {
            return false;
        }*/
            //此判断等于前面三项判断的合并
            if (L == null || R == null || L.val != R.val) {
                return false;
            }
            //比较外层左节点和右节点 比如3 和 3
            boolean compareOutside = recur(L.left, R.right);
            //比较里层右节点和左节点 比如 4 和 4
            boolean compareInside = recur(L.right, R.left);
            return compareOutside && compareInside;
        }
    }

除了使用递归的思路,还可以使用迭代的方法来解题。

class Solution {
    /*
    迭代法,相当于两个栈的感觉
    */
    public boolean isSymmetric(TreeNode root) {
        Deque<TreeNode> deque = new LinkedList<>();
        deque.offerFirst(root.left);
        deque.offerLast(root.right);
        while (!deque.isEmpty()) {
            TreeNode leftNode = deque.pollFirst();
            TreeNode rightNode = deque.pollLast();
            if (leftNode == null && rightNode == null) {
                continue;
            }
            if (leftNode == null || rightNode == null || leftNode.val != rightNode.val) {
                return false;
            }
            deque.offerFirst(leftNode.left);
            deque.offerFirst(leftNode.right);
            deque.offerLast(rightNode.right);
            deque.offerLast(rightNode.left);
        }
        return true;
    }
}
posted @ 2021-08-01 00:49  RainsX  阅读(28)  评论(0)    收藏  举报