题目:
给你两棵二叉树的根节点
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
思路:
层次遍历,如果两棵树结点的值不一样,返回false;
如果结点值相同且不为null,将数组第一个元素的左右结点放入数组队列,删除数组第一个元素;
如果结点值相同且为null,将数组第一个元素删除后,函数continue
代码:
/**
* 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 arr1 = [p] , arr2 = [q]
while(arr1.length||arr2.length){
// 取出两个树的值
let a = arr1[0]?arr1[0].val:null
let b = arr2[0]?arr2[0].val:null
// 比较值,分情况判断
if(a!=b) return false
if(a==null){
arr1.shift()
arr2.shift()
continue
}
arr1.push(arr1[0].left)
arr1.push(arr1[0].right)
arr1.shift()
arr2.push(arr2[0].left)
arr2.push(arr2[0].right)
arr2.shift()
// console.log(2,arr1,arr2)
}
return true
};