leetcode 算法题100 (简单021) 相同的树

leetcode 算法题100 (简单021) 相同的树

  • 题目介绍
给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
  • 示例

输入:

        1         1
       / \       / \
      2   3     2   3

     [1,2,3],   [1,2,3]

输出: true

输入:

     1            1
     /             \
    2               2

   [1,2],        [1,null,2]

输出: false

输入:

       1         1
      / \       / \
     2   1     1   2

    [1,2,1],   [1,1,2]

输出: false

  • 解法一
/**
 * 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(!q) {
    return !p;
  }
  if(!p) {
    return false;
  }
  return p.val === q.val && isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
};

执行用时 : 76ms, 在所有 JavaScript 提交中击败了70.75%的用户

内存消耗 : 33.8MB, 在所有 JavaScript 提交中击败了20.07%的用户

  • 解法二
/**
 * 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(!q) {
    return !p;
  }
  if(!p) {
    return false;
  }
  return isSameTree(p.left, q.left) && p.val === q.val && isSameTree(p.right, q.right) ;
};

执行用时 : 60ms, 在所有 JavaScript 提交中击败了99.18的用户

内存消耗 : 33.7MB, 在所有 JavaScript 提交中击败了32.20%的用户

  • 解法三
/**
 * 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(!q) {
    return !p;
  }
  if(!p) {
    return false;
  }
  return isSameTree(p.left, q.left) && p.val === q.val && isSameTree(p.right, q.right) ;
};

执行用时 : 72ms, 在所有 JavaScript 提交中击败了97.73的用户

内存消耗 : 33.7MB, 在所有 JavaScript 提交中击败了22.35%的用户

  • 注意

使用的树的 前序 中序 后序遍历比较,实际算法的效率和内层消耗应该和树的结构有关

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值