【LeetCode】101. 对称二叉树
程序员文章站
2024-01-11 17:03:52
...
用递归的方法:
public class Solution {
public boolean isSymmetric(TreeNode root) {
if(root==null) return true;
// 用递归的方法来判断一个树是不是对称的树
return method(root.left, root.right);
}
// 这个方法能够判断两棵树是不是镜面对称的
public boolean method(TreeNode node1, TreeNode node2) {
if (node1 == null && node2 == null) return true;
if (node1 == null) return false;
if (node2 == null) return false;
return node1.val == node2.val &&
method(node1.left, node2.right)
&& method(node1.right, node2.left);
}
}
用遍历的方法:
层序遍历,利用两个队列,一个从左向右储存元素,一个从右向左存储元素。进行remove处理,进行比较。
public class Solution {
public boolean isSymmetric(TreeNode root) {
if (root == null) return true;
// 用遍历的方法来解这道题目
// 用层序遍历的方法
Queue<TreeNode> queue1 = new LinkedList<>();
Queue<TreeNode> queue2 = new LinkedList<>();
queue1.add(root);
queue2.add(root);
while (!queue1.isEmpty()) {
int size = queue1.size();
for (int i = 0; i < size; i++) {
TreeNode tmp1 = queue1.remove();
TreeNode tmp2 = queue2.remove();
if (tmp1 == null && tmp2 == null) continue;
if (tmp1 == null || tmp2 == null) return false;
if (tmp1.val != tmp2.val) return false;
queue1.add(tmp1.left);
queue1.add(tmp1.right);
queue2.add(tmp2.right);
queue2.add(tmp2.left);
}
}
return true;
}
}