一颗二叉树的镜像二叉树如果和原树的结构相同且点权相等。则该二叉树为对称二叉树。 给定一颗二叉树,判定其是否为对称二叉树。
时间: 2024-11-18 13:14:28 浏览: 19
判断一棵二叉树是否是对称的,可以通过递归的方式来比较左右子树是否对称。对于每个节点,我们需要检查两个条件:
1. 左右子树是否存在(非空)。
2. 如果存在,左子树的根节点的值等于右子树的根节点的值,且左子树和右子树都是对称的。
以下是一个Java的方法实现,使用了递归的方式:
```java
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
// constructor, getters and setters omitted for brevity
}
public boolean isSymmetric(TreeNode root) {
if (root == null || (root.left != null && root.right != null && root.left.val != root.right.val)) {
return false;
}
return isSymmetric(root.left, root.right);
}
private boolean isSymmetric(TreeNode left, TreeNode right) {
if (left == null && right == null) {
return true;
} else if (left == null || right == null) {
return false;
} else {
return left.val == right.val && isSymmetric(left.left, right.right) && isSymmetric(left.right, right.left);
}
}
```
在这个`isSymmetric`方法中,我们首先检查根节点是否满足对称条件,如果不是,则返回`false`。然后我们递归地调用`isSymmetric`方法,传入当前节点的左、右子节点。如果左子节点为空并且右子节点也为空,说明它们是对称的;如果只有一个为空或两者不相等,就不是对称的。否则,进一步检查左子树的左子节点和右子树的右子节点,以及左子树的右子节点和右子树的左子节点是否对称。
阅读全文