国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【算法刷題day20】Leetcode:654. 最大二叉樹、617.合并二叉樹、700. 二叉搜索樹中的搜索、98.驗(yàn)證二叉搜索樹

這篇具有很好參考價(jià)值的文章主要介紹了【算法刷題day20】Leetcode:654. 最大二叉樹、617.合并二叉樹、700. 二叉搜索樹中的搜索、98.驗(yàn)證二叉搜索樹。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

草稿圖網(wǎng)站
java的Deque

Leetcode 654. 最大二叉樹

題目:654. 最大二叉樹
解析:代碼隨想錄解析

解題思路

NLR的建樹

代碼

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode constructMaximumBinaryTree(int[] nums) {
        return buildTree(nums, 0, nums.length);
    }
    private TreeNode buildTree(int[] nums, int left, int right) {
        if (left == right)
            return null;
        if (left + 1 == right)
            return new TreeNode(nums[left]);
        int mid = left;
        int midNum = nums[left];
        for (int i = left + 1; i < right; i++) {
            if (nums[i] > midNum){
                midNum = nums[i];
                mid = i;
            }
        }
        TreeNode newNode = new TreeNode(midNum);
        newNode.left = buildTree(nums, left, mid);
        newNode.right = buildTree(nums, mid + 1, right);
        return newNode;
    }
}

總結(jié)

暫無

Leetcode 617.合并二叉樹

題目:617.合并二叉樹
解析:代碼隨想錄解析

解題思路

如果都為root1, root2都為空,返回null;如果root1為空,root2不為空,返回root2;如果roo1不為空,root2為空,返回root1,否則創(chuàng)建新節(jié)點(diǎn),遞歸。
改進(jìn):以root1為主樹,并對(duì)判斷條件減枝。

代碼

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
        if (root1 == null && root2 == null)
            return null;
        else if (root1 != null && root2 == null)
            return root1;
        else if (root1 == null && root2 != null)
            return root2;
        else {
            TreeNode newNode = new TreeNode(root1.val + root2.val);
            newNode.left = mergeTrees(root1.left, root2.left);
            newNode.right = mergeTrees(root1.right, root2.right);
            return newNode;
        }
    }
}

//改進(jìn),減少了一點(diǎn)點(diǎn)內(nèi)存消耗
class Solution {
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
        if (root1 == null)  return root2;
        if (root2 == null)  return root1;
        root1.val = root1.val + root2.val;
        root1.left = mergeTrees(root1.left, root2.left);
        root1.right = mergeTrees(root1.right, root2.right);
        return root1;
    }
}

//前序遍歷
class Solution {
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
        if (root1 == null)  return root2;
        if (root2 == null)  return root1;
        Stack<TreeNode> stack = new Stack<>();
        stack.push(root2);
        stack.push(root1);
        while (!stack.isEmpty()) {
            TreeNode node1 = stack.pop();
            TreeNode node2 = stack.pop();
            node1.val += node2.val;
            if (node1.right != null && node2.right != null){
                stack.push(node2.right);
                stack.push(node1.right);
            } else {
                if (node1.right == null)
                    node1.right = node2.right;
            }
            if (node1.left != null && node2.left != null) {
                stack.push(node2.left);
                stack.push(node1.left);
            }else {
                if (node1.left == null)
                    node1.left = node2.left;
            }
        }
        return root1;
    }
}

//層序遍歷
class Solution {
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
        if (root1 == null)  return root2;
        if (root2 == null)  return root1;
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root1);
        queue.add(root2);
        while (!queue.isEmpty()) {
            TreeNode node1 = queue.poll();
            TreeNode node2 = queue.poll();
            node1.val += node2.val;
            if (node1.left != null && node2.left != null) {
                queue.add(node1.left);
                queue.add(node2.left);
            }else {
                if (node1.left == null)
                    node1.left = node2.left;
            }
            if (node1.right != null && node2.right != null){
                queue.add(node1.right);
                queue.add(node2.right);
            } else {
                if (node1.right == null)
                    node1.right = node2.right;
            }
        }
        return root1;
    }
}

總結(jié)

暫無

Leetcode 700. 二叉搜索樹中的搜索

題目:700. 二叉搜索樹中的搜索
解析:代碼隨想錄解析

解題思路

代碼

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode searchBST(TreeNode root, int val) {
        if (root == null || root.val == val)
           return root;
        if (root.val < val)
            return searchBST(root.right, val);
        if (root.val > val)
            return searchBST(root.left, val);
        return null;
    }
}

//不遞歸直接搜
class Solution {
    public TreeNode searchBST(TreeNode root, int val) {
        while (root != null) {
            if (val < root.val) root = root.left;
            else if (val > root.val) root = root.right;
            else return root;
        }
        return null;
    }
}

總結(jié)

暫無

Leetcode 98.驗(yàn)證二叉搜索樹

題目:98.驗(yàn)證二叉搜索樹
解析:代碼隨想錄解析

解題思路

中序遍歷,記錄上一個(gè)節(jié)點(diǎn)的值和現(xiàn)在的比,如果遍歷完就返回true。

代碼

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    private int pre = Integer.MIN_VALUE;
    public boolean isValidBST(TreeNode root) {
        if (root == null)
            return true;
        if (!isValidBST(root.left))
            return false;
        if (root.val <= pre)
            return false;
        pre = root.val;
        return isValidBST(root.right);
    }
}

//迭代
class Solution {
    public boolean isValidBST(TreeNode root) {
        if (root == null)
            return true;
        Stack<TreeNode> stack = new Stack<>();
        TreeNode pre = null;
        while (root != null || !stack.isEmpty()) {
            while (root != null) {
                stack.push(root);
                root = root.left;
            }
            TreeNode node = stack.pop();
            if (pre != null && pre.val >= node.val)
                return false;
            pre = node;
            node = node.right;
        }
        return true;
    }
}

總結(jié)

暫無文章來源地址http://www.zghlxwxcb.cn/news/detail-846290.html

到了這里,關(guān)于【算法刷題day20】Leetcode:654. 最大二叉樹、617.合并二叉樹、700. 二叉搜索樹中的搜索、98.驗(yàn)證二叉搜索樹的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 算法刷題Day 16 二叉樹的最大深度+N叉樹的最大深度+二叉樹的最小深度+完全二叉樹的節(jié)點(diǎn)個(gè)數(shù)

    遞歸法 迭代法 使用層序的方法,相對(duì)比較好理解 遞歸法 迭代法 跟二叉樹的迭代差不多意思。 要想到是后序遍歷 遞歸法 先計(jì)算左右兩棵子樹的節(jié)點(diǎn)數(shù),再加和,用后序遍歷的方法 迭代法 迭代法用層序遍歷來處理 適用于完全二叉樹的優(yōu)化 完全二叉樹優(yōu)化方法沒自己想出來

    2024年02月17日
    瀏覽(33)
  • 算法訓(xùn)練day16Leetcode104二叉樹最大深度111二叉樹最小深度222完全二叉樹的節(jié)點(diǎn)個(gè)數(shù)

    https://www.bilibili.com/video/BV1Gd4y1V75u/?vd_source=8272bd48fee17396a4a1746c256ab0ae 用遞歸,但是什么順序沒想清楚 二叉樹節(jié)點(diǎn)的深度:指從根節(jié)點(diǎn)到該節(jié)點(diǎn)的最長簡單路徑邊的條數(shù)或者節(jié)點(diǎn)數(shù)(取決于深度從0開始還是從1開始) 二叉樹節(jié)點(diǎn)的高度:指從該節(jié)點(diǎn)到葉子節(jié)點(diǎn)的最長簡單路徑邊

    2024年01月16日
    瀏覽(28)
  • 654. 最大二叉樹

    654. 最大二叉樹

    思路: https://leetcode.cn/problems/maximum-binary-tree/solution/zui-da-er-cha-shu-by-leetcode-solution-lbeo/

    2024年02月11日
    瀏覽(14)
  • 每日一練:LeeCode-654、最大二叉樹【二叉樹+DFS+分治】

    每日一練:LeeCode-654、最大二叉樹【二叉樹+DFS+分治】

    本文是力扣LeeCode-654、最大二叉樹【二叉樹+DFS+分治】 學(xué)習(xí)與理解過程,本文僅做學(xué)習(xí)之用,對(duì)本題感興趣的小伙伴可以出門左拐LeeCode。 給定一個(gè) 不重復(fù)的整數(shù)數(shù)組 nums 。 最大二叉樹 可以用下面的算法從 nums 遞歸地構(gòu)建: 創(chuàng)建 一個(gè)根節(jié)點(diǎn) , 其值為 nums 中的最大值 。 遞歸

    2024年02月21日
    瀏覽(18)
  • C++力扣題目654--最大二叉樹

    C++力扣題目654--最大二叉樹

    給定一個(gè)不重復(fù)的整數(shù)數(shù)組? nums ?。? 最大二叉樹 ?可以用下面的算法從? nums ?遞歸地構(gòu)建: 創(chuàng)建一個(gè)根節(jié)點(diǎn),其值為? nums ?中的最大值。 遞歸地在最大值? 左邊 ?的? 子數(shù)組前綴上 ?構(gòu)建左子樹。 遞歸地在最大值? 右邊 ?的? 子數(shù)組后綴上 ?構(gòu)建右子樹。 返回? nums ?構(gòu)

    2024年01月20日
    瀏覽(22)
  • 【LeetCode】617.合并二叉樹

    【LeetCode】617.合并二叉樹

    給你兩棵二叉樹:? root1 ?和? root2 ?。 想象一下,當(dāng)你將其中一棵覆蓋到另一棵之上時(shí),兩棵樹上的一些節(jié)點(diǎn)將會(huì)重疊(而另一些不會(huì))。你需要將這兩棵樹合并成一棵新二叉樹。合并的規(guī)則是:如果兩個(gè)節(jié)點(diǎn)重疊,那么將這兩個(gè)節(jié)點(diǎn)的值相加作為合并后節(jié)點(diǎn)的新值;否則

    2024年02月13日
    瀏覽(20)
  • day20 最大的二叉樹 合并二叉樹 二叉搜索樹中的搜索 驗(yàn)證二叉搜索樹

    day20 最大的二叉樹 合并二叉樹 二叉搜索樹中的搜索 驗(yàn)證二叉搜索樹

    題目鏈接:654 最大二叉樹 題意 根據(jù)不重復(fù)的整數(shù)數(shù)組nums構(gòu)建最大的二叉樹 ,根節(jié)點(diǎn)是數(shù)組中的最大值,最大值左邊的子數(shù)組構(gòu)建左子樹,最大值右邊的子數(shù)組構(gòu)建右子樹 nums數(shù)組中最少含有1個(gè)元素,并且nums中的元素?cái)?shù)值均大于等于0 遞歸? 遞歸三部曲: 1)確定遞歸函數(shù)的

    2024年01月21日
    瀏覽(16)
  • 算法刷題Day 15 二叉樹的層序遍歷+翻轉(zhuǎn)二叉樹+對(duì)稱二叉樹

    層序遍歷二叉樹需要借助到隊(duì)列 遞歸方法 迭代方法 就是簡單的用上前序遍歷迭代方法實(shí)現(xiàn),不用想的太復(fù)雜 遞歸方法 迭代方法 這里使用了隊(duì)列來存放兩個(gè)要比較的結(jié)點(diǎn)。也可以使用棧,方法是類似的。

    2024年02月12日
    瀏覽(53)
  • 算法刷題Day 17 平衡二叉樹+二叉樹的所有路徑+左葉子之和

    計(jì)算左右兩棵子樹的高度,如果有一個(gè)高度是-1(有一棵子樹不平衡),直接返回-1,否則計(jì)算高度差,判斷是否不平衡 使用 回溯 的方法,每次處理一個(gè)節(jié)點(diǎn)之前要把它push進(jìn)table里,處理完之后又要把它pop出來 處理一個(gè)節(jié)點(diǎn)時(shí),要判斷它是否是左節(jié)點(diǎn)(需要父節(jié)點(diǎn),可以通

    2024年02月15日
    瀏覽(32)
  • 算法刷題Day 37 單調(diào)遞增的數(shù)字+監(jiān)聽二叉樹

    兩個(gè)可能經(jīng)常要用到的函數(shù) 字符串轉(zhuǎn)數(shù)字: to_string() 數(shù)字轉(zhuǎn)字符串: stoi() 利用樹后續(xù)遍歷,同時(shí)加上狀態(tài)轉(zhuǎn)移的方法,非常值得反復(fù)學(xué)習(xí)

    2024年02月13日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包