力扣刷题Days12第二题--100相同的树(js)

文章介绍了如何使用深度优先遍历和广度优先遍历来判断两棵二叉树是否结构相同且节点值相等,提供了JavaScript实现的`isSameTree`函数。
摘要由CSDN通过智能技术生成

目录

1,题目

2,代码

2.1深度优先遍历

2.2广度优先遍历

3,学习与总结


1,题目

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

2,代码

2.1深度优先遍历

如果两个二叉树都为空,则二叉树相同;

如果两个二叉树只有一个为空,则两个二叉树一定不相同;

如果两个二叉树都不为空,则先判断根节点的值是否相同;若相同,则分别判断两个二叉树的左子树和右子树是否相同;

/**
 * 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) {
    // 深度优先搜索 递归  树结构是否一样 再去比较节点中的值是否是一样的
    if(p === null && q ===null){
        return true;
    }else if (p===null || q===null){
        return false;
    }else if(p.val != q.val  ){
        return false;
    }else {
        // 该节点 的子树结构一样 且值一样,则继续递归
        return isSameTree(p.left,q.left) && isSameTree(p.right,q.right)
    }
};

2.2广度优先遍历

锻炼思维

/**
 * 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) {
     if (p === null && q === null) {
        return true;
    } else if (p === null || q === null) {
        return false;
    }

    let queue1 = [p];
    let queue2 = [q];

    while (queue1.length > 0 && queue2.length > 0) {
        let node1 = queue1.shift();
        let node2 = queue2.shift();

        if (node1.val !== node2.val) {
            return false;
        }

        let left1 = node1.left, right1 = node1.right, left2 = node2.left, right2 = node2.right;

        if ((left1 === null) !== (left2 === null)) {
            return false;
        }

        if ((right1 === null) !== (right2 === null)) {
            return false;
        }

        if (left1 !== null) {
            queue1.push(left1);
        }

        if (right1 !== null) {
            queue1.push(right1);
        }

        if (left2 !== null) {
            queue2.push(left2);
        }

        if (right2 !== null) {
            queue2.push(right2);
        }
    }

    return queue1.length === 0 && queue2.length === 0;
};

3,学习与总结

广度优先思维需要继续加强

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值