判断对称二叉树

给定一个二叉树,检查它是否是镜像对称的。

例如,二叉树 [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

解题思路:

若二叉树是镜像对称的,处于同一层对称的两个节点node1与node2,

node1的值与node2的值必相等,且node1.left与node2.right的值也相等,且node1.right 与 node2.left的值也相等。

如上例1中,同处于第二层的对称的两个节点(2  与  2),二者值相等,且node1的左子结点(3)与node2的右子节点(3)值相等,且node1的右子结点(4)与node2的左子节点(4)值相等。

扫描二维码关注公众号,回复: 2008027 查看本文章

实现代码:

    // 记录判断结果
    private static boolean res = true;

    private static void test(TreeNode node1, TreeNode node2) {

        // 若已得到该树不对称,返回
        if (!res) return;

        if (node1!=null && node2!=null) {
            // 两个节点的值是否相等
            if (node1.val != node2.val) {
                res = false;
                return;
            }
            // 两个节点的子节点
            test(node1.left, node2.right);
            test(node1.right, node2.left);
        }
        else if (node1==null && node2==null) return;
        else res = false;
    }

猜你喜欢

转载自www.cnblogs.com/deltadeblog/p/9286009.html