题目:对称的二叉树
方法:递归
public class Solution {
public boolean isSymmetrical(TreeNode pRoot) {
if (pRoot == null) {
return true;
}
return isSymmetrical(pRoot.left, pRoot.right);
}
private boolean isSymmetrical(TreeNode root1, TreeNode root2) {
if (root1 == null) {
return root2 == null;
}
if (root2 == null || root1.val != root2.val) {
return false;
}
return isSymmetrical(root1.left, root2.right) && isSymmetrical(root1.right, root2.left);
}
}
方法:广度优先遍历
public class Solution {
public boolean isSymmetrical(TreeNode pRoot) {
if (pRoot == null) {
return true;
}
TreeNode root1 = pRoot.left;
TreeNode root2 = pRoot.right;
if (!isEqual(root1, root2)) {
return false;
}
if (root1 == null) {
return true;
}
Queue<TreeNode> queue1 = new ArrayDeque<>();
Queue<TreeNode> queue2 = new ArrayDeque<>();
queue1.offer(root1);
queue2.offer(root2);
while (!queue1.isEmpty()) {
root1 = queue1.poll();
root2 = queue2.poll();
if (!isEqual(root1.left, root2.right) || !isEqual(root1.right, root2.left)) {
return false;
}
if (root1.left != null) {
queue1.offer(root1.left);
queue2.offer(root2.right);
}
if (root1.right != null) {
queue1.offer(root1.right);
queue2.offer(root2.left);
}
}
return true;
}
private boolean isEqual(TreeNode node1, TreeNode node2) {
if (node1 == null) {
return node2 == null;
} else {
return node2 != null && node1.val == node2.val;
}
}
}
方法:深度优先遍历
public class Solution {
public boolean isSymmetrical(TreeNode pRoot) {
if (pRoot == null) {
return true;
}
TreeNode root1 = pRoot.left;
TreeNode root2 = pRoot.right;
if (!isEqual(root1, root2)) {
return false;
}
if (root1 == null) {
return true;
}
Deque<TreeNode> stack1 = new ArrayDeque<>();
Deque<TreeNode> stack2 = new ArrayDeque<>();
while (root1 != null) {
if (!isEqual(root1.left, root2.right) || !isEqual(root1.right, root2.left)) {
return false;
}
if (root1.right != null) {
stack1.push(root1.right);
stack2.push(root2.left);
}
root1 = root1.left;
root2 = root2.right;
if (root1 == null) {
root1 = stack1.poll();
root2 = stack2.poll();
}
}
return true;
}
private boolean isEqual(TreeNode node1, TreeNode node2) {
if (node1 == null) {
return node2 == null;
} else {
return node2 != null && node1.val == node2.val;
}
}
}