題目出處:https://leetcode.com/problems/same-tree/
題目描述:
給定兩個二叉樹,編寫一個函數來檢查它們是否相同。
如果兩個二叉樹在結構上相同并且節點具有相同的值,則認為它們是相同的。
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;
};