特征提取&&递归
对称二叉树具有以下特征
假设x=root.left;y=x.right,则x,y具有以下特征
x.val equals y.val &&
x.left.val equals y.right.val &&
x.right.val equals y.left.val
则可以设置一个递归函数isSame(TreeNode left, TreeNode right)
- 递归终止条件是 left,right都为null,返回true; 两者有一个为null,返回false; 两者val不相等,返回false。
- 不满足递归终止条件,则进入下一次递归中
isSame(left.left, right.right) && isSame(left.right, right.left)
boolean isSymmetrical(TreeNode pRoot) {
if (pRoot == null){
return true;
}
return isSame(pRoot.left, pRoot.right);
}
boolean isSame(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;
}
//left的左孩子 == right的右孩子 且
//left的右孩子 == right的左孩子,则对称
return isSame(left.left, right.right) && isSame(left.right, right.left);
}