![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4ecd32dbac1db4020e962d59c6f17bc7.jpeg)
题目
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例 1:
输入:p = [1,2,3], q = [1,2,3]
输出:true
示例 2:
输入:p = [1,2], q = [1,null,2]
输出:false
示例 3:
输入:p = [1,2,1], q = [1,1,2]
输出:false
提示:
两棵树上的节点数目都在范围 [0, 100] 内
-104 <= Node.val <= 104
思路
这道题目其实和【leetcode】101.对称二叉树很相似,而且难度还降低了一些,我们只需要比较相同位置的节点值即可,同样可以使用递归和迭代两种写法。
代码只需要在【leetcode】101.对称二叉树的基础上修改以下即可。
代码
- 递归
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} p
* @param {TreeNode} q
* @return {boolean}
*/
var isSameTree = function(p, q) {
function compare(l , r){
// 当两个节点都为null,对称,返回true
if(!l && !r) return true
// 当一个节点为null另一个不为null,返回false
if(!l || !r) return false
// 当两个节点的值不相等,返回false
if(l.val !== r.val) return false
//只需要修改这里的代码
// 当两个节点的值都相等,进行接下来的递归操作
const res1 = compare(l.left , r.left)
const res2 = compare(l.right , r.right)
// 只有两个返回值都为true时才返回true,否则返回false
return res1 && res2
}
return compare(p , q)
};
- 迭代
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} p
* @param {TreeNode} q
* @return {boolean}
*/
var isSameTree = function(p, q) {
let queue = []
// 这里修改成p、q
queue.push(p)
queue.push(q)
while(queue.length){
// 出队两个节点
const leftNode = queue.shift()
const rightNode = queue.shift()
// 两个节点都为空,对称,跳过本次循环
if(!leftNode && !rightNode) continue
// 两个节点有一个为空 或者 都不为空但值不相等 返回false
if(!leftNode || !rightNode || leftNode.val !== rightNode.val) return false
// 修改这里的代码
// 入队对应位置的节点
queue.push(leftNode.left)
queue.push(rightNode.left)
queue.push(leftNode.right)
queue.push(rightNode.right)
}
return true
};
关注我的专栏,每天更新三道leetcode题解,一起变强!