天天看點

leetcode記錄:問題簡單:100. Same Tree

題目出處: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上傳回的是節點,但是我自己傳回是個數組,是以導緻了結果不同

leetcode記錄:問題簡單:100. Same Tree

代碼:

/**
 * 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;
};