【45.对称二叉树】

21 阅读1分钟

题目

给你一个二叉树的根节点 root , 检查它是否轴对称。

示例 1:

输入: root = [1,2,2,3,4,4,3]
输出: true

题解

一棵树自己和自己比很麻烦,两棵树就好比较了,左节点和右节点比,右节点和左节点比

方式一:递归

public boolean isSymmetric(TreeNode root) {
    return isSymmetric(root, root);
}

// 比较两颗树是否对称
public boolean isSymmetric(TreeNode p, TreeNode q) {
    // 终止条件
    if (p == null && q == null) {
        return true;
    }
    if ((p == null || q == null) || p.val != q.val) {
        return false;
    }
    // 比较左右子树
    return isSymmetric(p.right, q.left) && isSymmetric(p.left, q.right);
}

方式二:迭代

public boolean isSymmetric(TreeNode root) {
    return isSymmetric(root, root);
}

// 比较两颗树是否对称
public boolean isSymmetric(TreeNode p, TreeNode q) {
    Deque<TreeNode> deque = new LinkedList<>();
    deque.offer(p);
    deque.offer(q);
    while (!deque.isEmpty()) {
        TreeNode node1 = deque.poll();
        TreeNode node2 = deque.poll();
        if (node1 == null && node2 == null) {
            continue;
        }
        if ((node1 == null || node2 == null) || node1.val != node2.val) {
            return false;
        }
        deque.offer(node1.right);
        deque.offer(node2.left);
        deque.offer(node1.left);
        deque.offer(node2.right);
    }
    return true;
}

总结

算法:递归迭代