国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Offer系列面試題0:重建二叉樹

算法與數據結構 ? 來源:圖解面試算法 ? 2020-07-09 15:03 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

今天分享的題目來源于 LeetCode 上的劍指 Offer 系列面試題07. 重建二叉樹,近半年在微軟面試環節出現過 2 次,屬于中高難度的算法題!

一、題目描述

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重復的數字。

例如,給出

前序遍歷preorder=[3,9,20,15,7] 中序遍歷inorder=[9,3,15,20,7]

返回如下的二叉樹:

3 / 920 / 157

限制:

0 <= 節點個數 <= 5000

二、題目解析

首先,我們先來復習一下前序遍歷、中序遍歷。(在下方的視頻中分布講解)

前序遍歷

二叉樹的前序遍歷順序是:根節點、左子樹、右子樹,每個子樹的遍歷順序同樣滿足前序遍歷順序。

中序遍歷

二叉樹的中序遍歷順序是:左子樹、根節點、右子樹,每個子樹的遍歷順序同樣滿足中序遍歷順序。

復習過后,我們可以得出以下結論:

在二叉樹的前序遍歷序列中,第一個數字總是樹的根結點的值;

在二叉樹的中序遍歷序列中,根結點的值在序列的中間,左子樹的結點的值位于根結點的值的左邊,而右子樹的結點的值位于根結點的值的右邊

以本題的序列為例,前序遍歷序列的第一個數字 3 就是根結點的值,在中序遍歷序列,找到根結點值的位置。根據中序遍歷特點,在根結點的值 3前面的數字都是左子樹結點的值,在根結點的值 3后面的數字都是右子樹結點的值。

二叉樹很重要的一個性質是遞歸,在找到了左子樹、右子樹的前序遍歷序列和中序遍歷序列后,我們可以按照同樣的方法去確定子左子樹和子右子樹的構建。

具體的代碼編寫思路如下(來源于 Krahets's Blog):

遞推參數:前序遍歷中根節點的索引pre_root_idx、中序遍歷左邊界in_left_idx、中序遍歷右邊界in_right_idx。

終止條件:當in_left_idx > in_right_idx,子樹中序遍歷為空,說明已經越過葉子節點,此時返回 null 。

遞推工作:

建立根節點 root :值為前序遍歷中索引為pre_root_idx的節點值。

搜索根節點 root 在中序遍歷的索引 i :為了提升搜索效率,本題解使用哈希表map預存儲中序遍歷的值與索引的映射關系,每次搜索的時間復雜度為 O(1)。

構建根節點root的左子樹和右子樹:通過調用 recursive()方法開啟下一層遞歸。

左子樹:根節點索引為 pre_root_idx + 1 ,中序遍歷的左右邊界分別為 in_left_idx 和 i - 1。

右子樹:根節點索引為 i - in_left_idx + pre_root_idx + 1(即:根節點索引 + 左子樹長度 + 1),中序遍歷的左右邊界分別為 i + 1 和 in_right_idx。

返回值:返回root,含義是當前遞歸層級建立的根節點root為上一遞歸層級的根節點的左或右子節點。

三、動畫描述

四、圖片描述

五、參考代碼

classSolution{ //在中序序列中查找與前序序列首結點相同元素的時候,如果使用while循環去一個個找效率很慢 //這里我們借助數據結構HashMap來輔助查找,在開始遞歸之前把所有的中序序列的元素和它們所在的下標存到一個map中,這樣查找的時間復雜度是O(logn) HashMapmap=newHashMap<>(); //保留的前序遍歷 int[]preorder; publicTreeNodebuildTree(int[]preorder,int[]inorder){ this.preorder=preorder; //在開始遞歸之前把所有的中序序列的元素和它們所在的下標存到一個map中 for(inti=0;iin_right_idx){ returnnull; } //root_idx是在前序里面的 TreeNoderoot=newTreeNode(preorder[pre_root_idx]); //通過map,根據前序的根節點的值,在中序中獲取當前根的索引 intidx=map.get(preorder[pre_root_idx]); //左子樹的根節點就是左子樹的(前序遍歷)第一個,就是+1,左邊邊界就是left,右邊邊界是中間區分的idx-1 root.left=recursive(pre_root_idx+1,in_left_idx,idx-1); //右子樹的根,就是右子樹(前序遍歷)的第一個,就是當前根節點加上左子樹的數量 root.right=recursive(pre_root_idx+(idx-1-in_left_idx+1)+1,idx+1,in_right_idx); returnroot; } }

這段代碼的一個難點就是root.left與root.right,我這里抽離出來詳細解釋一下。

1、root.left

2、root.right

六、復雜度分析

時間復雜度

時間復雜度為 O(N)。

空間復雜度

空間復雜度為 O(N)。

七、相關標簽

遞歸

哈希表

八、參考來源

1、https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/solution/mian-shi-ti-07-zhong-jian-er-cha-shu-di-gui-fa-qin/ 題解區

2、https://krahets.gitee.io/views/sword-for-offer/2020-02-24-sword-for-offer-07.html

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數字
    +關注

    關注

    1

    文章

    1700

    瀏覽量

    52553
  • 二叉樹
    +關注

    關注

    0

    文章

    74

    瀏覽量

    12935

原文標題:面試字節跳動時,我竟然遇到了原題……

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數據結構】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    TCP三次握手與四次揮手的詳細過程

    TCP 三次握手和四次揮手,大概是網絡領域被問爛了的面試題。但真正能把狀態變遷、序列號變化、抓包細節講清楚的人并不多。很多人背了八股文,一到生產環境看 Wireshark 抓包就懵了
    的頭像 發表于 02-25 10:38 ?217次閱讀

    億緯鋰能與杭集團達成戰略合作

    近日,億緯鋰能與杭集團2025年戰略研討會暨戰略合作協議簽約儀式在杭州舉行。億緯鋰能副總裁、商用車電池產品線總裁江吉兵博士,億緯鋰能商用車電池產品線國內銷售部總經理井振江,杭集團董事、副總經理兼
    的頭像 發表于 01-04 18:18 ?1085次閱讀

    通過優化代碼來提高MCU運行效率

    選擇時間復雜度低的算法。 根據訪問模式選擇數據結構。頻繁查找用哈希表,有序數據用二叉樹等。 查表法:對于復雜的數學計算(如sin, log),或者協議解析,預先計算好結果存于數組中,用空間換時間
    發表于 11-12 08:21

    人工智能工程師高頻面試題匯總:循環神經網絡篇(題目+答案)

    后臺私信雯雯老師,備注:循環神經網絡,領取更多相關面試題隨著人工智能技術的突飛猛進,AI工程師成為了眾多求職者夢寐以求的職業。想要拿下這份工作,面試的時候得展示出你不僅技術過硬,還得能解決問題。所以
    的頭像 發表于 10-17 16:36 ?707次閱讀
    人工智能工程師高頻<b class='flag-5'>面試題</b>匯總:循環神經網絡篇(題目+答案)

    用30道電子工程師面試題來拷問墮落的你...

    今天用30道電子工程師面試題來拷問墮落的你,你能扛住第幾題?1、下面是一些基本的數字電路知識問題,請簡要回答之。(1)什么是Setup和Hold時間?答:Setup/HoldTime用于測試芯片
    的頭像 發表于 10-15 17:37 ?1133次閱讀
    用30道電子工程師<b class='flag-5'>面試題</b>來拷問墮落的你...

    請問rtt studio 的文件夾打紅什么意思?

    rtt studio 的文件夾打紅什么意思?而且文件夾里面實際是有文件的,但是瀏覽不出來。
    發表于 09-18 06:34

    億緯鋰能榮獲杭集團2022-2024年度優秀供應商獎

    近日,億緯鋰能憑借卓越產品、可靠交付與優質服務榮獲杭集團頒發的“2022-2024年度優秀供應商”獎。杭集團副總經理兼杭電器董事長金華曙、杭電器總經理兼杭博電機總經理李明輝出席
    的頭像 發表于 07-15 09:00 ?986次閱讀

    每周推薦!硬件設計指南+無刷電機原理圖大全+工程師面試題庫匯總

    、硬件工程師或研發類筆試面試題庫匯總 一、模擬電路(基本概念和知識總攬) 1、基本放大電路種類 (電壓放大器,電流放大器,互導放大器和互阻放大器),優缺點,特別是廣泛采用差分結構的原因。 2、負反饋種類
    發表于 07-07 14:38

    硬件工程師或研發類筆試面試題庫匯總

    ,并具有電壓跟隨的特點。常用于電壓放大電路的輸入級和輸出級,在功率放大電路中也常采用射極輸出的形式。廣泛采用差分結構的原因是差分結構可以抑制溫度漂移現象。? 7、極管主要用于限幅,整流,鉗位
    發表于 07-01 14:21

    最全的硬件工程師筆試試題

    硬件面試題之一 1、下面是一些基本的數字電路知識問題,請簡要回答之。 (1) 什么是 Setup 和 Hold 時間? 答:Setup/Hold Time 用于測試芯片對輸入信號和時鐘信號之間的時間
    發表于 06-26 15:34

    【硬件方向】名企面試筆試真題:大疆創新校園招聘筆試題

    名企面試筆試真題:大疆創新校園招聘筆試題-硬件 是幾年前的題目,不過值得參考一下哦 純分享貼,有需要可以直接下載附件獲取完整資料! (如果內容有幫助可以關注、點贊、評論支持一下哦~)
    發表于 05-16 17:31

    硬件工程師面試/筆試經典 100 題

    分享一些常見的硬件工程師面試/筆試題。公眾號后臺回復關鍵字:100題,可獲取完整的PDF。--END--免責聲明:本文轉自網絡,版權歸原作者所有,如涉及作品版權問題,請及時與我們聯系,謝謝!加入粉絲
    的頭像 發表于 04-30 19:34 ?1450次閱讀
    硬件工程師<b class='flag-5'>面試</b>/筆試經典 100 題

    硬件工程師面試必看試題(經典)

    硬件工程師面試試題 模擬電路 1、基爾霍夫定理的內容是什么?(仕蘭微電子) 2、平板電容公式(C=εS/4πkd)。(未知) 3、最基本的如三極管曲線特性。(未知) 4、描述反饋電路的概念
    發表于 04-21 15:36

    請問有沒有辦法修改live系統上的設備

    i.MX8M 納米 yocto Linux 我想在不經過構建過程的情況下測試 Device Tree 更改。有沒有辦法修改 live 系統上的設備設置? This https
    發表于 04-09 08:23

    模電與數電的基本知識 (學習備用)

    類似TTL和CMOS區別的基礎面試題1,TTL電平:輸出高電平>2.4V,輸出低電平=2.0V,輸入低電平Vih,輸入低電平Vih>Vt>Vil>Vol。6:Ioh:邏輯門
    的頭像 發表于 03-26 19:32 ?1947次閱讀
    模電與數電的基本知識 (學習備用)