题目描述:
给定两个二叉树,编写一个函数来检查它们是否相同。
如果两个二叉树在结构上相同并且节点具有相同的值,则认为它们是相同的。
Example 1:
Input: 1 1 1 1
/ \ / \ / \
2 3 2 3 2 2
[1,2,3], [1,2,3] [1,2], [1,null,2]
Output: true Output: false
Example 2:
Input: 1 1
/ \ / \
2 1 1 2
[1,2,1], [1,1,2]
Output: false
思路:
我自己是想把各个节点上的值,组成数组比较,因为即便是null是可以被push进数组的,但是报错了,原因很奇怪。
我在循环里输出了a[i],b[i],leetcode上返回的是节点,但是我自己返回是个数组,所以导致了结果不同

代码:
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} p
* @param {TreeNode} q
* @return {boolean}
*/
var isSameTree = function(p, q) {
if(!p && !q) return true
if(!p || !q) return false
let a = [];
let b = [];
let result = true;
a = a.concat([p.val,p.left,p.right]);
b = b.concat([q.val,q.left,q.right]);
for(let i =0,len = a.length;i<len;i++){
if(a[i] !== b[i]){
console.log(a[i])
console.log(b[i])
result = false;
break
}
}
return result
};
大佬代码:
var isSameTree = function(p, q) {
var val = false
const traversal = (top1, top2) => {
if(!top1 && !top2) return true;
let returnValue = false;
if(top1 && top2) {
returnValue = top1.val === top2.val;
}
else if((top1 && !top2) || (!top1 && top2)){
returnValue = false;
}
if(returnValue) {
returnValue = traversal(top1.left, top2.left);
}
if(returnValue) {
returnValue = traversal(top1.right, top2.right);
}
return returnValue;
}
val = traversal(p, q);
return val;
};
|