LeetCode hot100-47-N

105. 從前序與中序遍歷序列構造二叉樹給定兩個整數數組 preorder 和 inorder ,其中 preorder 是二叉樹的先序遍歷, inorder 是同一棵樹的中序遍歷,請構造二叉樹并返回其根節點。

這題放選擇題里還能選出來,前序中序一起確定了一顆什么樣的樹。編程是一點都寫不來的,沒有思路。
看了答案
確定好一個節點的位置,在前序遍歷和中序遍歷中,這個節點左子樹和右子樹的節點個數是一樣多的
前序遍歷每次第一個節點就是當前的根節點,將這個根節點放到中序遍歷中去找,找到的它的位置了。這個位置左邊的就是左子樹的所有節點,這個節點右邊的就是右子樹的所有節點。

確實不會,直接看答案把,只要是遞歸的時候對于前序和中序哪些是左子樹哪些是右子樹要確定好

class Solution {private Map<Integer, Integer> indexMap;public TreeNode myBuildTree(int[] preorder, int[] inorder, int preorder_left, int preorder_right, int inorder_left, int inorder_right) {if (preorder_left > preorder_right) {return null;}// 前序遍歷中的第一個節點就是根節點int preorder_root = preorder_left;// 在中序遍歷中定位根節點int inorder_root = indexMap.get(preorder[preorder_root]);// 先把根節點建立出來TreeNode root = new TreeNode(preorder[preorder_root]);// 得到左子樹中的節點數目int size_left_subtree = inorder_root - inorder_left;// 遞歸地構造左子樹,并連接到根節點// 先序遍歷中「從 左邊界+1 開始的 size_left_subtree」個元素就對應了中序遍歷中「從 左邊界 開始到 根節點定位-1」的元素root.left = myBuildTree(preorder, inorder, preorder_left + 1, preorder_left + size_left_subtree, inorder_left, inorder_root - 1);// 遞歸地構造右子樹,并連接到根節點// 先序遍歷中「從 左邊界+1+左子樹節點數目 開始到 右邊界」的元素就對應了中序遍歷中「從 根節點定位+1 到 右邊界」的元素root.right = myBuildTree(preorder, inorder, preorder_left + size_left_subtree + 1, preorder_right, inorder_root + 1, inorder_right);return root;}public TreeNode buildTree(int[] preorder, int[] inorder) {int n = preorder.length;// 構造哈希映射,幫助我們快速定位根節點indexMap = new HashMap<Integer, Integer>();for (int i = 0; i < n; i++) {indexMap.put(inorder[i], i);}return myBuildTree(preorder, inorder, 0, n - 1, 0, n - 1);}
}作者:力扣官方題解
鏈接:https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal/solutions/255811/cong-qian-xu-yu-zhong-xu-bian-li-xu-lie-gou-zao-9/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

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

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

相關文章

Linux備份服務及rsync企業備份架構(應用場景)

備份服務概述 備份服務:需要使用到腳本,打包備份,定時任務. 備份服務:rsyncd服務,不同主機之間數據傳輸. 特點&#xff1a; rsync是個服務也是命令使用方便&#xff0c;具有多種模式傳輸數據的時候是增量傳輸 增量與全量&#xff1a; 全量 &#xff1a;無論多少數據全部推…

貪心算法:合并區間

參考資料&#xff1a;代碼隨想錄 題目鏈接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 做過用最少數量的箭引爆氣球和無重疊區間這兩道題目后&#xff0c;題意和題解都不難理解。唯一的一點兒難點是對于api的運用。 class Solution {public int[][] merge(int[][…

設備管理全解析:從選購到報廢的全方位指南

在現代企業快速發展、智能化運營過程中&#xff0c;企業設備管理是保障生產連續性和效率的核心環節&#xff0c;其重要性不言而喻。然而&#xff0c;許多企業在設備管理內容流程方面仍然使用傳統管理辦法&#xff0c;這不僅影響了生產效率&#xff0c;也增加了不必要的成本。那…

vuejs路由和組件系統

前端路由原理 createRouter * hash* window.addEventListener(hashChange)* 兩種實現路由切換的模式&#xff1a;UI組件&#xff08;router-link&#xff0c;router-view&#xff09;&#xff0c;Api&#xff08;push()方法&#xff09; * history * HTML5新增的API &#xff0…

每日一題(1)

在看一本08年出版的書的時候&#xff0c;看到了這樣一個問題&#xff0c;感覺答案很奇怪&#xff1a; public class demo_p22 {public static void main(String args[]){int sCook1,sFish2;//各技能標記character ch1new character();if(ch1.haveSkill(sCook))System.out.print…

仙樂健康科技股份有限公司「E立方仿生增效技術平臺」推出新品啦

在這個看臉的顏值經濟時代,很多女性將肌膚保養作為人生的“必修課”,從各種網上攻略到高端護膚品,再到美容院的專業護理,可以說是應有盡有。最近,仙樂健康科技股份有限公司「E立方仿生增效技術平臺」推出的新品——PQQ鹽膠原小分子肽樺樹汁飲品,就受到了頗多追求健康美人士的關…

svg中漸變色的應用

設置漸變色背景 在 SVG 中可以使用<linearGradient>或<radialGradient>元素來設置漸變背景色。以下是一個簡單的示例&#xff1a; <svg width"400" height"400"><defs><linearGradient id"myGradient"><stop…

Discord運營攻略 | 從0-1教你搭建用戶社區!

Discord&#xff0c;這個最初為游戲愛好者設計的通訊平臺&#xff0c;現在已經發展成為了一個多元化的社區聚集地&#xff0c;涵蓋了各種興趣和行業。如果你是一名社媒運營人員&#xff0c;正在考慮如何從零開始構建一個充滿活力的Discord用戶社區&#xff0c;那么你來對地方了…

【CSP CCF記錄】202012-2 期末預測之最佳閾值

題目 過程 思路 第一次沒用前綴和&#xff0c;暴力求解得50分。 采用前綴和方法。 1. 對原數組stu[i]進行排序。 2. 計算前綴和數組s[]&#xff0c;s[i]表示安全指數的y_i的前綴和&#xff0c;即安全指數小于等于y_i時的實際掛科情況&#xff0c;y_i之前有多少個未掛科&am…

無線領夾麥克風哪個品牌好?無線麥克風品牌排行榜前十名推薦

?在當今的數字化浪潮中&#xff0c;個人聲音的傳播和記錄變得尤為重要。無論是會議中心、教室講臺還是戶外探險&#xff0c;無線領夾麥克風以其卓越的便攜性和連接穩定性&#xff0c;成為了人們溝通和表達的首選工具。面對市場上琳瑯滿目的無線麥克風選擇&#xff0c;為了幫助…

Python筑基之旅-MySQL數據庫(三)

目錄 一、數據庫操作 1、創建 1-1、用mysql-connector-python庫 1-2、用PyMySQL庫 1-3、用PeeWee庫 1-4、用SQLAlchemy庫 2、刪除 2-1、用mysql-connector-python庫 2-2、用PyMySQL庫 2-3、用PeeWee庫 2-4、用SQLAlchemy庫 二、數據表操作 1、創建 1-1、用mysql-…

38. 外觀數列 - 力扣(LeetCode)

基礎知識要求&#xff1a; Java&#xff1a;方法、for循環、if eles語句、StringBuilder類 Python&#xff1a; 方法、for循環、if else語句、字符串拼接 題目&#xff1a; 「外觀數列」是一個數位字符串序列&#xff0c;由遞歸公式定義&#xff1a; countAndSay(1) "…

記錄Python低代碼開發框架zdppy_amcrud的開發過程

實現新增接口 基礎代碼 import env import mcrud import api import snowflakeenv.load(".env") db mcrud.new_env()table "user" columns ["name", "age"]async def add_user(req):data await api.req.get_json(req)values [d…

SkyEye對接CANoe:助力汽車軟件功能驗證

01.簡介 CANoe&#xff08;CAN open environment&#xff09;是德國Vector公司專為汽車總線設計而開發的一款通用開發環境&#xff0c;作為車載網絡和ECU開發、測試和分析的專業工具&#xff0c;支持從需求分析到系統實現的整個系統的開發過程。CANoe豐富的功能和配置選項被OE…

虛擬ECU:徹底改變汽車軟件開發與測試

汽車開發領域有著垂直性較強的一系列需求&#xff0c;其中最為矚目的需求之一就是對安全高效的軟件測試方法的需求。傳統的汽車開發偏向使用硬件原型與真實ECU進行軟件測試&#xff0c;但由于硬件設備往往在開發周期的中后階段才生產完成&#xff0c;給汽車開發帶來了成本與時間…

理解Solidity 中的 tx.origin 和 msg.sender

開發者需要了解在Solidity中tx.origin和msg.sender的區別。這兩個全局變量經常被混淆&#xff0c;盡管它們之間有著根本的不同。雖然乍一看它們可能相似&#xff0c;但在交易的上下文中&#xff0c;tx.origin和msg.sender代表不同的地址。在這篇博客文章中&#xff0c;我們將深…

spring boot 之 事務

內容是小老弟的一些整理和個人思考總結&#xff0c;知識的海洋那么大&#xff0c;有錯誤的話還請諸位大佬指點一下&#xff01; 事務是一個不可分割操作序列&#xff0c;也是數據庫并發控制的基本單位&#xff0c;其執行的結果必須使數據庫從一種一致性狀態變到另一種一致性狀…

電商內卷時代,視頻號小店憑借一己之力“脫穎而出”

大家好&#xff0c;我是電商笨笨熊 今年618各大電商平臺花樣百出&#xff1b; 某寶更是直接取消了“預售”&#xff0c;從5月就開始進入618預熱期&#xff1b; 不少玩家既開心又難過&#xff0c;市場如此內卷&#xff0c;618確實是個爆發期&#xff0c;但更多的需要不斷壓低…

Star CCM+分配零部件至區域后交界面丟失-更新找回

前言 在工程應用中&#xff0c;將零部件分配至區域后&#xff0c;一般常規的操作需要對交界面進行檢查。偶爾會發現交界面丟失。遇到此類問題&#xff0c;在沒有做其他操作前&#xff08;比如畫網格&#xff09;&#xff0c;可以選擇先刪除所有區域在重新分配至區域。若已經進…

基于SSM的大學生兼職管理系統

基于SSM的大學生兼職管理系統的設計與實現~ 開發語言&#xff1a;Java數據庫&#xff1a;MySQL技術&#xff1a;SpringSpringMVCMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系統展示 登錄界面 企業界面 前臺學生界面 管理員界面 摘要 隨著大學生兼職市場的日益繁…