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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章