题目:
https://oj.leetcode.com/problems/symmetric-tree/
判断一个二叉树是不是对称。这不是一个非常简单的题目
需要两个变量,leftList,rightList,每次移出一个比较。
要注意leftList,rightList的压入顺序和
public class Solution {
public static boolean isSymmetric(TreeNode root) {
if(root==null)return true;
LinkedList<TreeNode>leftList=new LinkedList<TreeNode>();
LinkedList<TreeNode>rightList=new LinkedList<TreeNode>();
leftList.offer(root.left);
rightList.offer(root.right);
while(!leftList.isEmpty()&&!rightList.isEmpty()){
TreeNode left=leftList.poll();
TreeNode right=rightList.poll();
if(left==null&&right==null)continue;
if(left==null||right==null)return false;
if(left.val!=right.val)return false;
leftList.offer(left.left);
leftList.offer(left.right);
rightList.offer(right.right);
rightList.offer(right.left);
}
return true;
}
}
另外还有递归的方法:
public class Solution {
public static boolean isSymmetric(TreeNode root) {
if(root==null)return true;
return isSymmetricHelper(root.left,root.right);
}
public static boolean isSymmetricHelper(TreeNode left,TreeNode right){
if(left==null&&right==null)return true;
if(left==null||right==null)return false;
if(left.val!=right.val)return false;
boolean leftcheck=isSymmetricHelper(left.left,right.right);
boolean rightcheck=isSymmetricHelper(left.right,right.left);
return leftcheck&&rightcheck;
}
}