题目描述
思路
按照顺序,同步比较两个树的各个节点。
DFS
先考虑这两个节点val相等吗?
- 如果相等,判断下一层,直到两者都是null,返回true
- 不相等,直接返回false
class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
if (p == null && q == null) {
return true;
}
//先考虑p.val = q.val吗,如果相等,那么往下一层比较。前面的条件是防止一边null,一边不null
if (p != null && q != null && p.val == q.val) {
return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
} else {
return false;
}
}
}
BFS
- 按照图中的顺序遍历,能保证两棵树是按照一样的pace(一样的节点顺序)同步遍历的
- 这样一来,while中一开始removeFirst两个,得到的是同样位置上的两个节点
//BFS
class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
LinkedList<TreeNode> queue = new LinkedList<>();
//一开始加入两棵树的根节点
queue.add(p);
queue.add(q);
while (!queue.isEmpty()) {
TreeNode node1 = queue.removeFirst();
TreeNode node2 = queue.removeFirst();
if (node1 == null && node2 == null) {
continue;
}
if (node1 == null || node2 == null) {
return false;
}
if (node1.val != node2.val) {
return false;
}
//注意添加顺序
queue.add(node1.left);
queue.add(node2.left);
queue.add(node1.right);
queue.add(node2.right);
}
return true;
}
}