LeetCode 101 Symmetric Tree

题目描述

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

For example, this binary tree is symmetric:

《LeetCode 101 Symmetric Tree》

But the following is not:

《LeetCode 101 Symmetric Tree》

Note:
Bonus points if you could solve it both recursively and iteratively.

分析

递归

参考LeetCode 100 Same Tree,仅仅将判断条件改成p.left和q.right、p.right和q.left相比即可。

迭代

考虑用队列,每次add两个对应的结点。

如果队列长度为0,则退出循环;否则取出队列中的两个结点,对值进行判断。

代码

    // recursively
    public static boolean isSymmetric(TreeNode root) {

        if (root == null) {
            return true;
        }

        return isSymmetric(root.left, root.right);
    }

    static boolean isSymmetric(TreeNode p, TreeNode q) {

        if (p == null && q == null) {
            return true;
        } else if (p == null || q == null) {
            return false;
        }

        return p.val == q.val && isSymmetric(p.left, q.right)
                && isSymmetric(p.right, q.left);
    }
    // iteratively
    public static boolean isSymmetric2(TreeNode root) {

        if (root == null) {
            return true;
        }

        Deque<TreeNode> deque = new LinkedList<TreeNode>();

        if (root.left == null && root.right == null) {
            return true;
        } else if (root.left == null || root.right == null) {
            return false;
        } else {
            deque.addLast(root.left);
            deque.addLast(root.right);
        }

        while (deque.size() != 0) {
            TreeNode p = deque.pop();
            TreeNode q = deque.pop();

            if (p.val != q.val) {
                return false;
            }

            if (p.left == null && q.right == null) {
                // do nothing
            } else if (p.left == null || q.right == null) {
                return false;
            } else {
                deque.addLast(p.left);
                deque.addLast(q.right);
            }

            if (p.right == null && q.left == null) {
                // do nothing
            } else if (p.right == null || q.left == null) {
                return false;
            } else {
                deque.addLast(p.right);
                deque.addLast(q.left);
            }
        }

        return true;

    }
    原文作者:_我们的存在
    原文地址: https://blog.csdn.net/yano_nankai/article/details/50051611
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞