题目:判断二叉树是否对称
思路:
- 递归:递归函数返回的是,是否对称。
- 迭代:借助队列。
代码,递归:
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @return bool布尔型
*/
public boolean isSymmetric (TreeNode root) {
// write code here
if (root == null) {
return true;
}
return Symmetric(root.left, root.right);
}
public boolean Symmetric (TreeNode left, TreeNode right) {
if(left == null && right == null) {
return true;
}
if(left == null && right != null ||
left != null && right == null) {
return false;
}
return left.val == right.val &&
Symmetric(left.left, right.right)&&
Symmetric(left.right, right.left);
}
}
代码:迭代
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @return bool布尔型
*/
public boolean isSymmetric (TreeNode root) {
// write code here
if (root == null) {
return true;
}
Queue<TreeNode> queue = new LinkedList();
queue.offer(root.left);
queue.offer(root.right);
while (!queue.isEmpty()) {
TreeNode n1 = queue.poll();
TreeNode n2 = queue.poll();
if (n1 == null && n2 == null) {
continue;
}
if (n1 == null && n2 != null ||
n1 != null && n2 == null ||
n1 != null && n2 != null && n1.val != n2.val) {
return false;
}
queue.offer(n1.left);
queue.offer(n2.right);
queue.offer(n1.right);
queue.offer(n2.left);
}
return true;
}
}