题目描述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
解题思路
二叉树的先序遍历是先根再左再右;我们针对此定义其对称遍历算法为先根再再右左。即再遍历过程中,对这棵树的左右节点分别进行比较。
/*
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) {
return func(pRoot, pRoot);
}
public boolean func(TreeNode p, TreeNode q) {
if (p == null && q == null) {
return true;
} // 如果均为null则相等
if (p == null || q == null) {
return false;
} // 如果其中一个为null则不想等
if (p.val != q.val) {
return false;
} // 如果均非null且val相等,则继续判断left和right
// p的left和q的right比较;p的right和q的left比较,均相等则对称
return func(p.left, q.right) && func(p.right, q.left);
}
}