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上返回的是节点,但是我自己返回是个数组,所以导致了结果不同

 

代码:

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值