题目描述:
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
思路解析:
- 判断是不是空结点,是的话直接是对称的
- 判断两边的左右子树是不是对称的,左右子树为空,返回true;有一个为空则是false
- 还要判断两个结点是不是相等的,然后左子树的左子树和右子树的右子树相等,中间的两个相等。
代码:
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
boolean isSymmetrical(TreeNode pRoot)
{
if(pRoot == null)//空直接是对称的
return true;
return isSymmetrical(pRoot.right,pRoot.left);
}
boolean isSymmetrical(TreeNode right,TreeNode left){//判断左右是否相等的
if(right==null && left==null)//左右子树都为空
return true;
if(right==null || left==null)//左右子树有一个为空
return false;
//左右节点相等并且左子树左边的点和右子树右边的点相等的;还有中间的部分也是相等的
return left.val==right.val&&isSymmetrical(right.right,left.left) && isSymmetrical(left.right,left.right);
}
}