算法:判断一个二叉树是否对称(镜面)

223 阅读1分钟
/**
 * 判断二叉树是否对称
 * @param root
 * @return
 */
public static boolean isMirror(Node root) {
    return isSymmetrical(root.left, root.right);
}

/**
 * 两个节点结构是否相等
 * @param p
 * @param q
 * @return
 */
public static boolean isSymmetrical(Node p, Node q) {
    // 有一个节点为空,另一个节点不为空,就不是对称
    if (p == null ^ q == null) {
        return false;
    }
    // 如果两个节点都是空,就是对称
    if (p == null && q == null) {
        return true;
    }
    // 如果两个节点都不为空,比较值和子节点
    return p.value == q.value && isSymmetrical(p.left, q.right) && isSymmetrical(p.right, q.left);
}
```
```