程式碼隨想錄演算法訓練營第第20天 | 654.最大二叉樹 、617.合併二叉樹 、700.二叉搜尋樹中的搜尋、98.驗證二叉搜尋樹

YuanYF6發表於2024-05-27

654.最大二叉樹

又是構造二叉樹,昨天大家剛剛做完 中序後序確定二叉樹,今天做這個 應該會容易一些, 先看影片,好好體會一下 為什麼構造二叉樹都是 前序遍歷
題目連結/文章講解:https://programmercarl.com/0654.最大二叉樹.html
影片講解:https://www.bilibili.com/video/BV1MG411G7ox

比106.從中序與後序遍歷序列構造二叉樹 簡單點
自己做出來了
/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {number[]} nums
 * @return {TreeNode}
 */
var constructMaximumBinaryTree = function(nums) {
    if (nums.length === 0) return null;
    let max = Math.max(...nums);
    let index = nums.indexOf(max);
    let maxNode = new TreeNode(max);
    maxNode.left = constructMaximumBinaryTree(nums.slice(0,index));
    maxNode.right = constructMaximumBinaryTree(nums.slice(index+1));
    return maxNode;
};

617.合併二叉樹

這次是一起操作兩個二叉樹了, 估計大家也沒一起操作過兩個二叉樹,也不知道該如何一起操作,可以看影片先理解一下。 優先掌握遞迴。
題目連結/文章講解:https://programmercarl.com/0617.合併二叉樹.html
影片講解:https://www.bilibili.com/video/BV1m14y1Y7JK

自己做出來了
/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root1
 * @param {TreeNode} root2
 * @return {TreeNode}
 */
var mergeTrees = function(root1, root2) {
    if (root1 === null && root2 === null) return root1;
    if (root1 === null) return root2;
    if (root2 === null) return root1;
    let num1 = root1.val;
    let num2 = root2.val;
    let total = num1 + num2;
    let totalNode = new TreeNode(total);
    totalNode.left = mergeTrees(root1.left, root2.left);
    totalNode.right = mergeTrees(root1.right, root2.right);
    return totalNode;
};

700.二叉搜尋樹中的搜尋

遞迴和迭代 都可以掌握以下,因為本題比較簡單, 瞭解一下 二叉搜尋樹的特性
題目連結/文章講解: https://programmercarl.com/0700.二叉搜尋樹中的搜尋.html
影片講解:https://www.bilibili.com/video/BV1wG411g7sF

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @param {number} val
 * @return {TreeNode}
 */
var searchBST = function(root, val) {
    if (root === null) return null;
    if (root.val > val) {
        return searchBST(root.left, val);
    } else if (root.val <val) {
        return searchBST(root.right, val);
    } else {
        return root;
    }
};

98.驗證二叉搜尋樹

遇到 搜尋樹,一定想著中序遍歷,這樣才能利用上特性。
但本題是有陷阱的,可以自己先做一做,然後在看題解,看看自己是不是掉陷阱裡了。這樣理解的更深刻。
題目連結/文章講解:https://programmercarl.com/0098.驗證二叉搜尋樹.html
影片講解:https://www.bilibili.com/video/BV18P411n7Q4

這題有一點坑
/**
 * @param {TreeNode} root
 * @return {boolean}
 */
var isValidBST = function(root) {
    let maxValue =Number.MIN_SAFE_INTEGER;
    const inOrder = (node) => {
        if (node === null) return true;
    
        let left = inOrder(node.left);
        if (!left || maxValue >= node.val) {
            return false;
        }
        maxValue = node.val;
        let right = inOrder(node.right);
        return left && right;
    }
    return inOrder(root);
};

相關文章