理论上,下面的代码是没错的,不懂它那个测试用例input{1,2,2,#,3,3}是个神马样子
来个递归的:
Input: {1,2,2,#,3,3}
Output: false
Expected: true
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isSysm(List<TreeNode> list){
int n = list.size();
TreeNode left = null;
TreeNode right = null;
for(int i = 0 ; i < n/2; i++){
left = list.get(i);
right = list.get(n-1-i);
if((left == null && right != null) || (left != null && right == null)){
return false;
}
else{
if(left == null && right == null){
continue;
}
else{
if(left.val == right.val){
continue;
}
else{
return false;
}
}
}
}
return true;
}
public boolean isSymmetric(TreeNode root) {
if(root == null || (root.left == null && root.right == null)){
return true;
}
List<TreeNode> list1 = new ArrayList<TreeNode>();
List<TreeNode> list2 = new ArrayList<TreeNode>();
TreeNode tmp = null;
list1.add(root);
int flag;
while(true){
flag = 0;
if(isSysm(list1)){
for(int i = 0; i < list1.size(); i++){
tmp = list1.get(i);
if(tmp != null){
if(tmp.left != null || tmp.right != null){
flag = 1;
}
list2.add(tmp.left);
list2.add(tmp.right);
}
}
list1 = list2;
}
else{
return false;
}
if(flag == 0){
return true;
}
}
}
}
来个递归的:
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isSys(TreeNode a, TreeNode b){
if(a == null && b == null){
return true;
}
if(a == null || b == null){
return false;
}
if(a.val != b.val){
return false;
}
return isSys(a.left, b.right)&&isSys(a.right, b.left);
}
public boolean isSymmetric(TreeNode root) {
if(root == null) return true;
return isSys(root.left,root.right);
}
}