题目
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
思路
针对前序遍历定义一种遍历算法,先遍历父节点,再遍历它的右子节点,最后遍历它的左子节点。
通过比较二叉树的前序遍历和对称前序遍历序列来判断二叉树是不是对称的。
测试用例
1.功能测试(对称二叉树;结构不对称二叉树;结构对称但值不对称二叉树)
2.特殊测试(根结点为null;单个结点;所有结点的值都相等的二叉树)
代码
package myNewSwordOffer;
public class isSymmetrical {
public class TreeNode{
int val;
TreeNode left;
TreeNode right;
public TreeNode(int val){
this.val = val;
}
}
public static boolean isEqual(TreeNode root) {
if(root == null) {
return true;
}
return isSymmetrical(root, root);
}
public static boolean isSymmetrical(TreeNode pRoot1, TreeNode pRoot2) {
if(pRoot1 == null && pRoot2 == null) {
return true;
}
if(pRoot1 == null || pRoot2 == null) {
return false;
}
return pRoot1.val == pRoot2.val
&& isSymmetrical(pRoot1.left, pRoot2.right)
&& isSymmetrical(pRoot1.right, pRoot2.left);
}
}