请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
思路:首先根节点以及其左右子树,左子树的左子树和右子树的右子树相同,左子树的右子树和右子树的左子树相同即可,采用递归,另外非递归也可,采用栈或队列存取各级子树根节点。
方法一
package lastfifteen;
public class treeSymmetrical {
boolean isSymmetrical(TreeNode pRoot)
{
TreeNode node = getMirror(pRoot);
return isSymmetrical(pRoot, node);
}
boolean isSymmetrical(TreeNode pRoot, TreeNode node)
{
if(pRoot == null && node == null){
return true;
}else if(pRoot == null|| node==null){
return false;
}
if(pRoot.val == node.val){
return isSymmetrical(pRoot.left, node.left)&&isSymmetrical(pRoot.right,node.right);
}
return false;
}
TreeNode getMirror(TreeNode pRoot){
if(pRoot == null){
return null;
}
TreeNode root = new TreeNode(pRoot.val);
root.right = getMirror(pRoot.left);