力扣labuladong一刷day30天二叉樹

力扣labuladong一刷day30天二叉樹

文章目錄

      • 力扣labuladong一刷day30天二叉樹
      • 一、654. 最大二叉樹
      • 二、105. 從前序與中序遍歷序列構造二叉樹
      • 三、106. 從中序與后序遍歷序列構造二叉樹
      • 四、889. 根據前序和后序遍歷構造二叉樹

一、654. 最大二叉樹

題目鏈接:https://leetcode.cn/problems/maximum-binary-tree/
思路:采用分解問題的方法,先構造父節點再構造左右子節點,每次都在指定區間內搜索,找到最大值后構造父節點,再劃分左右區間遞歸。

class Solution {public TreeNode constructMaximumBinaryTree(int[] nums) {return traverse(nums, 0, nums.length - 1);}TreeNode traverse(int[] nums, int left ,int right) {if (left > right) return null;int max = -1, index = -1;for (int i = left; i <= right; i++) {if (nums[i] > max) {max = nums[i];index = i;}}TreeNode root = new TreeNode(max);root.left = traverse(nums, left, index-1);root.right = traverse(nums, index+1, right);return root;}
}

二、105. 從前序與中序遍歷序列構造二叉樹

題目鏈接:https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal/
思路:通過前序和中序構造二叉樹,要維護好前序的區間以及中序的區間,先構造父節點再構造左右子節點,父節點是前序區間的left,左右子節點由遞歸返回。 此外要注意速度,想節省遍歷中序數組尋找父節點索引的時間的話,可以使用map預先存儲下來。

class Solution {Map<Integer, Integer> map = new HashMap<>();public TreeNode buildTree(int[] preorder, int[] inorder) {for (int i = 0; i < inorder.length; i++) {map.put(inorder[i], i);}return create(preorder, inorder, 0, preorder.length-1,0, inorder.length-1);}TreeNode create(int[] preorder, int[] inorder, int left1, int right1, int left2, int right2) {if (left1 > right1 || left2 > right2) return null;int midV = preorder[left1];TreeNode node = new TreeNode(midV);int index = map.get(midV);node.left = create(preorder, inorder, left1+1, left1+index-left2, left2, index-1);node.right = create(preorder, inorder, left1+index-left2+1, right1, index+1, right2);return node;}
}

三、106. 從中序與后序遍歷序列構造二叉樹

題目鏈接:https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/
思路:本題和上題類似,也是先構造父節點,然后再構造左右子節點,父節點由后續right構造,然后劃分中序和后序的區間,遞歸構造左右子樹。

class Solution {Map<Integer, Integer> map = new HashMap<>();public TreeNode buildTree(int[] inorder, int[] postorder) {for (int i = 0; i < inorder.length; i++) {map.put(inorder[i], i);}return create(inorder, postorder, 0, inorder.length-1, 0, postorder.length-1);}TreeNode create(int[] inorder, int[] postorder, int left1, int right1, int left2, int right2) {if (left1 > right1 || left2 > right2) return null;int midV = postorder[right2];int index = map.get(midV);TreeNode node = new TreeNode(midV);node.left = create(inorder, postorder, left1, index-1, left2, left2+index-left1-1);node.right = create(inorder, postorder, index+1, right1, left2+index-left1, right2-1);return node;}
}

四、889. 根據前序和后序遍歷構造二叉樹

題目鏈接:https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-postorder-traversal/
思路:通過前序和后序去構造二叉樹,構造的結果不唯一,但方法是一樣的,每次使用前序的left做為父節點,left+1做為左孩子的值,然后使用這個去后序中去劃分區間,然后在劃分前序遍歷的區間,之后遞歸構造即可。

class Solution {Map<Integer, Integer> map = new HashMap<>();public TreeNode constructFromPrePost(int[] preorder, int[] postorder) {for (int i = 0; i < postorder.length; i++) {map.put(postorder[i], i);}return create(preorder, postorder, 0, preorder.length-1, 0, postorder.length-1);}TreeNode create(int[] preorder, int[] postorder, int left1, int right1, int left2, int right2) {if (left1>right1 || left2>right2) return null;if (left1 == right1) return new TreeNode(preorder[left1]);int mid = preorder[left1];int index = map.get(preorder[left1+1]);TreeNode node = new TreeNode(mid);node.left = create(preorder, postorder, left1+1, left1 + index-left2+1, left2,index);node.right = create(preorder, postorder, left1 + index-left2+2, right1,index+1, right2-1);return node;}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/215152.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215152.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215152.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

智慧機房與3D機房動環監控系統的應用

智慧機房是什么&#xff1f; 智慧機房是集采集信息、實時監控、數據分析、統一管理、故障告警等功能于一體的全方位、立體化的智能環境監控系統&#xff0c;構建物聯網、大數據和云計算背景下現代企業的“數據心臟”。它能為機房管理者呈現細致入微的關鍵性數據&#xff0c;優…

電子學會C/C++編程等級考試2022年06月(五級)真題解析

C/C++等級考試(1~8級)全部真題?點這里 第1題:逃離迷宮 你在一個地下迷宮中找到了寶藏,但是也觸發了迷宮機關,導致迷宮將在T分鐘后坍塌,為此你需要在T分鐘內逃離迷宮,你想知道你能不能逃離迷宮。迷宮是一個邊長為m的正方形,其中"S"表示你所在的位置,"…

<url-pattern>/</url-pattern>與<url-pattern>/*</url-pattern>的區別

<url-pattern>/</url-pattern> servlet的url-pattern設置為/時&#xff0c; 它僅替換servlet容器的默認內置servlet&#xff0c;用于處理所有與其他注冊的servlet不匹配的請求。直白點說就是&#xff0c;所有靜態資源&#xff08;js&#xff0c;css&#xff0c;ima…

HCIA-H12-811題目解析(9)

1、【單選題】下面選項中&#xff0c;能使一臺IP地址為10.0.0.1的主機訪問Interne的必要技術是&#xff1f; 2、【單選題】 FTP協議控制平面使用的端口號為&#xff1f; 3、【單選題】 使用FTP進行文件傳輸時&#xff0c;會建立多少個TCP連接&#xff1f; 4、【單選題】完成…

ubuntu apache2配置反向代理

1.Ubuntu安裝apache sudo apt-get update sudo apt-get install apache2 2.apache2反向代理配置 sudo vim /etc/apache2/sites-available/000-default.conf 添加內容如下&#xff1a; <VirtualHost *:80># The ServerName directive sets the request scheme, host…

目標檢測YOLO實戰應用案例100講-基于深度學習的SAR圖像艦船目標檢測(續)

目錄 4基于自注意力機制的YOLO-v3算法的SAR圖像目標檢測 4.1 YOLO系列發展現狀 4.2自注意力機制

做數據分析為何要學統計學(10)——如何進行時間序列分析

時間序列是由隨時間變化的值構成&#xff0c;如產品銷量、氣溫數據等等。通過對時間序列展開分析&#xff0c;能夠回答如下問題&#xff1a; &#xff08;1&#xff09;被研究對象的活動特征是否有周期性&#xff08;也稱季節性&#xff09;&#xff08;2&#xff09;被研究對…

學生成績管理系統詳細設計書

1. 引言 本學生成績管理系統旨在滿足學校對學生成績進行高效、精準、便捷管理的需求。通過系統化的管理方式&#xff0c;改善現有成績管理方式的不足&#xff0c;提高工作效率&#xff0c;同時保證學生成績信息的準確性和安全性。本詳細設計文檔將為系統的實現提供全面的指導和…

UE4/UE5 修改/還原場景所有Actor的材質

使用藍圖方法&#xff1a; 1.修改場景所有Actor 材質&#xff1a; Wirframe&#xff1a;一個材質類 MatList&#xff1a;獲取到的所有模型的全部材質 的列表 TempAllClass&#xff1a;場景中所有獲取的 Actor 的列表 功能方法如下&#xff1a; 藍圖代碼可復制在&#xff1a…

Unity之OpenXR+XR Interaction Toolkit接入微軟VR設備Windows Mixed Reality

前言 Windows Mixed Reality 是 Microsoft 用于增強和虛擬現實體驗的VR設備,如下圖所示: 在國內,它的使用率很低,一把都是國外使用,所以適配起來是相當費勁。 這臺VR設備只能用于串流Windows,啟動后,會自動連接Window的Mixed Reality程序,然后打開微軟的增強現實門戶…

1.2 輕量級數據交互格式–JSON

對于接口來說,數據交互大部分都是使用的JSON格式,我們這里說的數據,就是我們上一章里講解HTTP協議的時候,HTTP協議結構里的實體,也就是放在body里。body里存放需要傳輸的數據,數據是JSON格式,然后通過HTTP協議來傳輸給接口,接口再以同樣的方式給我們返回。理解了這一層…

網絡基礎(五):網絡層協議介紹

目錄 一、網絡層 1、網絡層的概念 2、網絡層功能 3、IP數據包格式 二、ICMP協議 1、ICMP的作用和功能 2、ping命令的使用 2.1ping命令的通用格式 2.2ping命令的常用參數 2.3TypeCode&#xff1a;查看不同功能的ICMP報文 2.4ping出現問題 3、Tracert 4、沖突域 5、…

LSU介紹

LSU&#xff08;Load Store Unit&#xff09;是一個專門的執行單元&#xff0c;負責執行所有的加載&#xff08;load&#xff09;和存儲&#xff08;store&#xff09;指令等&#xff0c;生成load和store操作的虛擬地址&#xff0c;并從內存中加載數據或將數據從寄存器中存儲回…

關于前端原生技術-Jsonp的理解與簡述

【版權聲明】未經博主同意&#xff0c;謝絕轉載&#xff01;&#xff08;請尊重原創&#xff0c;博主保留追究權&#xff09; https://blog.csdn.net/m0_69908381/article/details/134777717 出自【進步*于辰的博客】 在學習了Jsoup這個知識點之后&#xff0c;發覺js的這一特點…

基于appium的常用元素定位方法

一、元素定位工具   app應用的元素使用的是控件定位&#xff0c;不同于web網頁&#xff0c;web網頁定位元素通常使用的是F12工具&#xff0c;那么在app當中我們則要借助其它的工具來輔助定位。 1.uiautomatorviewer.bat   uiautomatorviewer.bat工具在安裝完ADT工具之后&a…

【Docker】進階之路:(十一)Docker存儲

【Docker】進階之路&#xff1a;&#xff08;十一&#xff09;Docker存儲 Docker存儲簡介storage driverdata volumevolumebind mounttmpfs mount Docker提供了4種存儲方式&#xff1a;默認存儲、volume(數據卷)、bind mounts(綁定掛載)、tmpfsmount(僅在Linux環境中提供)。其中…

Jemeter,提取響應體中的數據:正則表達式、Json提取器

一、正則表達式 1、線程組--創建線程組&#xff1b; 2、線程組--添加--取樣器--HTTP請求&#xff1b; 3、Http請求--添加--后置處理器--正則表達式提取器&#xff1b; 4、線程組--添加--監聽器--查看結果樹&#xff1b; 5、線程組--添加--取樣器--調試取樣器。 響應體數據…

docker mysql8 設置不區分大小寫

docker安裝Mysql8.0的坑之lower_case_table_names_docker mysql lower_case_table_names-CSDN博客https://blog.csdn.net/p793049488/article/details/108365929 docker run ‐di ‐‐nametensquare_mysql ‐p 33306:3306 ‐e MYSQL_ROOT_PASSWORD123456 mysql

運籌學經典問題(一):指派問題

問題描述 有 N N N個任務&#xff0c;需要 N N N個人去完成&#xff0c;每個人完成不同工作的效率不同&#xff08;或者資源、收益等等&#xff09;&#xff0c;需要怎么分配使得整體的效率最高&#xff08;成本最低等等&#xff09;呢&#xff1f;這就是經典的指派問題啦&…

金蝶EAS如何增加報表

金蝶EAS如何增加銷售毛利報表&#xff1f; 文章目錄 菜單路徑&#xff1a;導入授權發布管理 菜單路徑&#xff1a; 商業分析———擴展報表中心——報表工具 ——報表工具 汽車 4S——整車管理——整車銷售——擴展報表 導入 選擇報表文件進行導入 授權 發布管理