LeetCode101. 对称二叉树

相同题目:剑指58.对称的二叉树

☆☆☆☆方法1:递归。总体思路是判断两个子树相反位置上的值是否相等。

☆☆☆☆方法2:迭代

  需要注意:如果二叉树所有节点值都相等,但结构不同仍然不对称,因此需要把节点是 null 的情况考虑进来。

class Solution {
    public boolean isSymmetric(TreeNode root) {
        /**
         *  方法1:递归
         */
        if (root == null) return true;
        return isEqual(root.left, root.right);
        /**
         *  方法2:迭代
         */
        /*
        if (root == null) return true;
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root.left);
        queue.offer(root.right);
        while (!queue.isEmpty()) {
            TreeNode cur1 = queue.poll();
            TreeNode cur2 = queue.poll();
            // 注意需要把节点是null的情况考虑进来,排除节点值相等但结构不相等的情况
            if (cur1 == null && cur2 == null) continue; // 注意是continue,接着判断后面的节点
            if (cur1 == null || cur2 == null) return false;
            if (cur1.val != cur2.val) return false;

            queue.offer(cur1.left);
            queue.offer(cur2.right);

            queue.offer(cur1.right);
            queue.offer(cur2.left);
        }
        return true;
        */
    }
    private boolean isEqual(TreeNode node1, TreeNode node2) {
        if (node1 == null && node2 == null) return true;
        if (node1 == null || node2 == null) return false;
        if (node1.val != node2.val) return false;
        return isEqual(node1.left,node2.right) &&
                isEqual(node1.right,node2.left);
    }
}
原文地址:https://www.cnblogs.com/HuangYJ/p/14171712.html