问题描述:
给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例 1:
输入: 1 1
/ \ / \
2 3 2 3
[1,2,3], [1,2,3]
输出: true
示例 2:
输入: 1 1
/ \
2 2
[1,2], [1,null,2]
输出: false
示例 3:
输入: 1 1
/ \ / \
2 1 1 2
[1,2,1], [1,1,2]
输出: false
解决思路:
方案就一个字:“两树同时递归遍历比较”
/*
*用途:相同的树
*/
boolean isOK = true;
public boolean isSameTree(TreeNode p, TreeNode q) {
if (p == null && q == null) return isOK;
if (p == null || q == null) {
isOK = false;
return false;
}
//深海看我题目脑子浮现出一个字:"递归";
if (p.val != q.val) {
isOK = false;
return false;
}
//左边叶子递归
if (p.left != null) {
//q没有对应叶子,直接说明不相同
if (q.left == null) {
isOK = false;
return false;
}
isSameTree(p.left, q.left);
} else {
if (q.left != null) {
isOK = false;
return false;
}
}
//右边叶子递归
if (p.right != null) {
//q没有对应叶子,直接说明不相同
if (q.right == null) {
isOK = false;
return false;
}
isSameTree(p.right, q.right);
} else {
if (q.right != null) {
isOK = false;
return false;
}
}
return isOK;
}
leetCode提交结果: