LeetCode 101 Symmetric Tree

来源:互联网 发布:编写一个java程序 编辑:程序博客网 时间:2024/05/08 22:57

题目描述

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

For example, this binary tree is symmetric:

这里写图片描述

But the following is not:

这里写图片描述

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;    }
0 0
原创粉丝点击