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

 

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