LeetCode二叉树相关部分题目——js解法

写好递归函数,二叉树的简单问题就基本解决了,以下整理了二叉树的一些简单题目,难度递增。

数据结构:

function TreeNode(val) {
   this.val = val;
   this.left = this.right = null;
}

1.相同的树

题目描述:

给定两个二叉树,编写一个函数来检验它们是否相同。

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

代码:递归比较左右节点

var isSameTree = function(p, q) {
    if(p===null&&q===null) return true
    else if(p!=null&&q!==null&&p.val===q.val){
        return  isSameTree(p.left,q.left)&&isSameTree(p.right,q.right)
    }
    else{
        return false
    }
};

2.对称二叉树

题目描述:给定一个二叉树,检查它是否是镜像对称的。

代码:在第一题的基础上,这道题就不是什么大问题了,只要递归检查节点的左子树和右子数是否是一样的树就可以了,上一题是分别递归比较两棵树的左子树和右子树,这一题则需要比较同一棵树的左右子树

var isSymmetric = function(root){
    const isSame=(p,q)=>{
        if(p===null&&q===null) return true
        else if(p!==null&&q!==null&&p.val===q.val){
            return isSame(p.left,q.right)&&isSame(p.right,q.left)
        }else{
            return false
        }
    }
    if(root===null) return true
    return isSame(root.left,root.right)
};

3.二叉树的最大深度

题目描述:

给定一个二叉树,找出其最大深度。

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

代码:也是递归,分别递增比较左右子树深度

var maxDepth = function(root) {
    function findMax(root,deep){
        return Math.max(findMax(root.left,deep+1),findMax(root.right,deep+1))
    }
    return findMax(root,0)
};

4.将有序数组转换为二叉搜索树

题目描述:

将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。

本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

代码:

var sortedArrayToBST = function(nums,l=0,r=nums.length) {
    if(l>=r){return null}
    let mid=Math.floor((l+r)/2)
    let tree=new TreeNode(nums[mid])
    tree.left=sortedArrayToBST(nums,left,mid)
    tree.right=sortedArrayToBST(nums,mid+1,right)
    return tree
};

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值