判断是否是镜像二叉树

镜像二叉树,也称为对称二叉树,是指一棵二叉树,它的左子树是右子树的镜像(或反过来,右子树是左子树的镜像)。判断一个二叉树是否是对称的,可以通过递归的方式进行。以下是一个简单的Java算法实现:

首先,定义二叉树的节点类:

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int x) {
        val = x;
    }
}

然后,实现判断是否为镜像二叉树的方法:

public class SymmetricTree {
    public boolean isSymmetric(TreeNode root) {
        if (root == null) {
            return true; // 空树是对称的
        }
        return checkSymmetry(root.left, root.right);
    }

    private boolean checkSymmetry(TreeNode left, TreeNode right) {
        // 如果两个子树都为空,说明当前层级是对称的
        if (left == null && right == null) {
            return true;
        }
        // 如果一个子树为空,另一个不为空,说明不对称
        if (left == null || right == null) {
            return false;
        }
        // 当前节点值相等,并且左右子树分别对称
        return (left.val == right.val) 
               && checkSymmetry(left.left, right.right) 
               && checkSymmetry(left.right, right.left);
    }

    public static void main(String[] args) {
        // 示例代码,创建一个对称的二叉树并测试
        TreeNode tree = new TreeNode(1);
        tree.left = new TreeNode(2);
        tree.right = new TreeNode(2);
        tree.left.left = new TreeNode(3);
        tree.left.right = new TreeNode(4);
        tree.right.left = new TreeNode(4);
        tree.right.right = new TreeNode(3);

        SymmetricTree solution = new SymmetricTree();
        System.out.println(solution.isSymmetric(tree)); // 应输出true
    }
}

SymmetricTree类中实现了isSymmetric方法来判断整个二叉树是否对称。checkSymmetry是一个辅助方法,它递归地比较两个子树是否互为镜像。如果在任意一层发现不满足对称条件(比如节点值不相等,或者一边的子树为空而另一边不为空),则立即返回false。只有当所有层级都满足对称条件时,才返回true,表明整棵树是对称的。

 

posted @ 2024-06-26 11:33  使用D  阅读(5)  评论(0编辑  收藏  举报