用java设计一个方法,判断一个二叉树是否对称
时间: 2024-05-04 10:20:41 浏览: 14
可以通过递归实现判断二叉树是否对称。对于一棵对称的二叉树,它的左右子树也是对称的,因此可以定义一个递归函数,判断左右子树是否对称。
具体实现步骤如下:
1. 定义一个isSymmetric方法,接收一个二叉树的根节点作为参数。
2. 在isSymmetric方法中定义一个helper方法,用于递归判断左右子树是否对称。该方法接收两个节点作为参数,分别表示左右子树的根节点。
3. 判断左右子树的根节点是否为空,如果都为空,则返回true;如果只有一个为空,则返回false。
4. 判断左右子树的根节点的值是否相同,如果不同,则返回false。
5. 分别递归判断左子树的左子树和右子树的右子树是否对称,以及左子树的右子树和右子树的左子树是否对称。
6. 如果所有判断都通过,则返回true。
代码实现如下:
```java
public boolean isSymmetric(TreeNode root) {
if (root == null) {
return true;
}
return helper(root.left, root.right);
}
private boolean helper(TreeNode left, TreeNode right) {
if (left == null && right == null) {
return true;
}
if (left == null || right == null) {
return false;
}
if (left.val != right.val) {
return false;
}
return helper(left.left, right.right) && helper(left.right, right.left);
}
```
其中,TreeNode表示二叉树的节点,定义如下:
```java
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
}
}
```
可以通过创建一棵对称二叉树和一棵非对称二叉树,分别进行测试,验证上述代码的正确性。