前端算法系列-二叉树05

37 阅读1分钟

654. 最大二叉树

一遍过,第一次感觉自己的算法有了一点点的进步

var constructMaximumBinaryTree = function(nums) {
    if(nums.length === 0) return null
    let maxNum = Math.max(...nums)
    let maxNumIndex = nums.indexOf(maxNum)
    let left = nums.slice(0,maxNumIndex)
    let right = nums.slice(maxNumIndex+1)
    return new TreeNode(maxNum,constructMaximumBinaryTree(left),constructMaximumBinaryTree(right))
};

617. 合并二叉树

一遍过

var mergeTrees = function(root1, root2) {
    if(!root1 && !root2){
        return null
    }else if(!root1 || !root2){
        let node = (root1 || root2)
        let val = node.val
        return new TreeNode(val,mergeTrees(node.left,null),mergeTrees(node.right,null))
    }
    let val = root1.val + root2.val
    return new TreeNode(val,mergeTrees(root1.left,root2.left),mergeTrees(root1.right,root2.right))
};

700. 二叉搜索树中的搜索

两遍过,val > root.val 这个条件写反了

var searchBST = function(root, val) {
    if(!root) return null
    if(root.val === val) return root
    let flag = val > root.val ? true : false
    if(flag){
        return searchBST(root.right,val)
    }else{
        return searchBST(root.left,val)
    }
};

98. 验证二叉搜索树

这道题a的时间比较久,一开始没想到中序遍历这个思路

var isValidBST = function(root) {
    let pre = null
    let fn = (root) => {
        if(!root) return true
        let left = fn(root.left)
        if(pre && pre.val >= root.val) return false
        pre = root
        let right = fn(root.right)
        return left && right
    }
    return fn(root)
};