给定一个二叉树,判断此树是否是关于自身对称的(即关于它中心对称)
For example, this binary tree [1,2,2,3,4,4,3]
is symmetric:
1 / \ 2 2 / \ / \ 3 4 4 3
But the following [1,2,2,null,3,null,3]
is not:
1 / \ 2 2 \ \ 3 3
递归方法:
public boolean isSymmetric(TreeNode root) {
if(root==null)
return true;
else
return issym(root.left,root.right);
}
public boolean issym(TreeNode left,TreeNode right)
{
if(left==null || right==null)//之前写是因为防止后面出现空指针异常
return left==right;
if(left.val!=right.val)
return false;
else
return issym(left.left,right.right) && issym(left.right,right.left);
}
非递归方法(用栈消除递归):
public boolean isSymmetric(TreeNode root) {
if(root==null)
return true;
Stack<TreeNode> stack=new Stack<TreeNode>();
TreeNode left,right;
if(root.left!=null)
{
if(root.right==null) return false;
stack.push(root.left);
stack.push(root.right);
}
else if(root.right!=null)
return false;
while(!stack.empty())
{
if(stack.size()%2!=0) return false;
right=stack.pop();
left=stack.pop();
if(right.val!=left.val)
return false;
if(left.left!=null)
{
if(right.right==null)
return false;
stack.push(left.left);
stack.push(right.right);
}
else if(right.right!=null)
return false;
if(left.right!=null){
if(right.left==null)
return false;
stack.push(left.right);
stack.push(right.left);
}
else if(right.left!=null)
return false;
}
return true;
}