解题思路:
可以定义一种遍历算法,先访问根节点,再遍历右子树后遍历左子树,可以将这种遍历方法称为对称的前序遍历。现在可以通过比较二叉树的前序遍历序列和对称前序遍历序列来判断二叉树是否对称。如果两个序列是一样的,那么二叉树是对称的。
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) {
return isSymmetrical(pRoot, pRoot);
}
private boolean isSymmetrical(TreeNode pRoot1, TreeNode pRoot2) {
if (pRoot1 == null && pRoot2 == null) {
return true;
}
if (pRoot1 == null || pRoot2 == null) {
return false;
}
if (pRoot1.val != pRoot2.val) {
return false;
}
//第一棵树使用前序遍历,第二棵树使用对称前序遍历(根,右子树,左子树)
return isSymmetrical(pRoot1.left, pRoot2.right) &&
isSymmetrical(pRoot1.right, pRoot2.left);
}
}