【數據結構與算法】數據結構初階:詳解二叉樹(六)——二叉樹應用:二叉樹選擇題


🔥個人主頁:艾莉絲努力練劍

?專欄傳送門:《C語言》、《數據結構與算法》、C語言刷題12天IO強訓、LeetCode代碼強化刷題

🍉學習方向:C/C++方向

??人生格言:為天地立心,為生民立命,為往圣繼絕學,為萬世開太平



重要提醒:為什么我們要學那么多的數據結構?這是因為沒有一種數據結構能夠去應對所有場景。我們在不同的場景需要選擇不同的數據結構,所以數據結構沒有誰好誰壞之分,而評估數據結構的好壞要針對場景,如果在一種場景下我們需要頻繁地對頭部進行插入刪除操作,那么這個時候我們用鏈表;但是如果對尾部進行插入刪除操作比較頻繁,那我們用順序表比較好。

? ? ? ? 因此,不同的場景我們選擇不同的數據結構。


前言:本篇文章,我們繼續來看二叉樹,來刷一刷選擇題,其實也是對前面學過的知識的一個回顧與練習,畢竟筆試面試已經越來越看重程序員的算法能力,把選擇題作為一個對已學知識的一個快速回顧——比如說加深對數據結構某個重要性質的記憶、降低記憶成本——還是很值得去做的。我們做這些選擇題正有此意:一來加深了對二叉樹性質的理解;二來通過做幾道代表性的選擇題我們將知識點迅速運用了起來,讓知識順利扎根在大腦;三來也是對自己學習二叉樹學習情況的一個小測驗。


目錄

正文

一、二叉樹性質相關選擇題

(一)性質

(二)題目

1、題目1?

2、題目2

3、題目3

4、題目4

二、鏈式二叉樹遍歷相關選擇題?

1、題目1?

2、題目2

3、題目3

4、題目4

5、加餐1:題目5

6、加餐2:題目6

三、二叉樹樹度相關選擇題

1、題目1

結尾


回顧:


正文

一、二叉樹性質相關選擇題

(一)性質

證明:

假設一個二叉樹有 a?個度為2的節點,b 個度為1的節點,c 個葉節點,則這個二叉樹的邊數是 2a+b,另一方面,由于共有 a+b+c 個節點,所以邊數等于 a+b+c-1。

2a + b?= a + b + c?- 1 ,即: a = c-1。

(二)題目

1、題目1?

1、某二叉樹共有 399 個結點,其中有 199 個度為 2 的結點,則該二叉樹中的葉子結點數為( )

A 不存在這樣的二叉樹

B 200

C 198

D 199

解析:

2、題目2

2、在具有 2n 個結點的完全二叉樹中,葉子結點個數為( )

A n

B n+1

C n-1

D n / 2

解析:

在完全二叉樹,有多少度為1的節點個數??

3、題目3

3、一棵完全二叉樹的結點數位為531個,那么這棵樹的高度為( )

A 11

B 10

C 8

D 12

解析:

4、題目4

4、一個具有767個結點的完全二叉樹,其葉子結點個數為()

A 383

B 384

C 385

D 386

解析:

二叉樹性質相關選擇題答案:

1、B

2、A

3、B

4、B

二、鏈式二叉樹遍歷相關選擇題?

1、題目1?

1、某完全二叉樹按層次輸出(同一層從左到右)的序列為 ABCDEFGH 。

該完全二叉樹的前序序列為( )

A. ABDHECFG

B. ABCDEFGH

C. HDBEAFCG

D. HDEBFGCA

解析:

2、題目2

2、二叉樹的先序遍歷和中序遍歷如下:先序遍歷:EFHIGJK;中序遍歷:HFIEJKG。

則二叉樹根結點為()

A E

B F

C G

D H

解析:先序遍歷打印的一個是就是根節點,知道了先序遍歷,根節點就找到了。

3、題目3

3、設一課二叉樹的中序遍歷序列:badce,后序遍歷序列:bdeca,

則二叉樹前序遍歷序列為____。

A adbce

B decab

C debac

D abcde

解析:

方法: 確定一個刪掉一個,也就是說:已知任意兩個求第三個。

根據后序遍歷找到根節點,中序遍歷看左右孩子。如下圖:

1、根據后序遍歷我們確定根節點就是a:

2、確定了,我們就把它刪掉,以免對我們產生干擾:

3、確定了a是根節點,我們看一下中序遍歷,a的左子樹是b,確定的就刪掉:

4、我們看:a的右子樹,中序遍歷的結果是dce,后序遍歷的結果是dec,ab我們都刪掉了,沒有干擾項。dec,根節點是c,既然根節點是c,我們再回到中序遍歷,c的左子樹是d,c的右子樹是e。后面大家做這種題目就可以采用這種方法。

4、題目4

4、某二叉樹的后序遍歷序列與中序遍歷序列相同,均為 ABCDEF,則按層次輸出(同一層從左到右)的序列為()

A FEDCBA

B CBAFED

C DEFCBA

D ABCDEF

解析:?

只有左子樹,沒有右子樹。?

5、加餐1:題目5

5、已知某二叉樹的中序遍歷序列為JGDHKBAELIMCF,后序遍歷序列為JGKHDBLMIEFCA,則其前序遍歷序列為( )

A.ABDGHJKCEFILM

B.ABDGJHKCEILMF

C.ABDHKGJCEILMF

D.ABDGJHKCEIMLF

解析:

由后序遍歷確定子樹的根,后序遍歷從后向前看,最后一個元素為根,和前序遍歷剛好相反,從后向前看后序遍歷,應該是根,右,左,根據中序遍歷確定子樹的左右區間。

詳解:

我們根據后序遍歷可知,A是根節點——

A的左子樹:JGDHKB,A的右子樹:ELIMCF;

A的左子樹的根:B,A的右子樹的根:C;

B的左子樹:JGDHK,B的右子樹:空,C的左子樹:ELIM,C的右子樹:F;

B的左子樹的根:D,C的左子樹根:E;

D的左子樹的根:G,D的右子樹的根:H,E的右子樹的根:I。

6、加餐2:題目6

6、已知某二叉樹的前序遍歷序列為5 7 4 9 6 2 1,中序遍歷序列為4 7 5 6 9 1 2,

則其后序遍歷序列為( )?

A.4 2 5 7 6 9 1

B.4 2 7 5 6 9 1

C.4 7 6 1 2 9 5

D.4 7 2 9 5 6 1

解析:?

首先根據前序和中序遍歷確定二叉樹結構:
前序遍歷是根左右,可知
前序遍歷第一個數5是根節點
在中序遍歷中找到5,左邊4 7是左子樹,右邊6 9 1 2是右子樹。
前序中5后面是7,7是左子樹的根,中序中7左邊是4,所以7的左子節點是4 。
前序接著是4、9,9是右子樹的一部分,中序中5右邊6在9前,所以9是6的父節點,我們逐步構建出二叉樹。
已知后序遍歷順序是
左右根
正確構建二叉樹后,后序遍歷應為4 7 6 1 2 9 5。

鏈式二叉樹遍歷相關選擇題答案:

1、A

2、A

3、D

4、A

5、B

6、C

三、二叉樹樹度相關選擇題

1、題目1

1、一顆擁有1000個結點的樹度為4,則它的最小深度是( )

A.5

B.6

C.7

D.8

解析·:?

要使樹深度最小,應讓樹盡可能“滿”,即除最后一層,每層結點數達該度下最大值

(度為4,則每層最多4^(i - 1)個結點,i 為層數 )。
設深度為h,前h - 1層是滿的,結點數和為(4^(h - 1) - 1) / (4 - 1)?。
當h = 5,前4層和為(4^4 - 1) / 3 = 85;

當h = 6,前5層和為(4^5 - 1) / 3 = 341;

當h = 7,前6層和為(4^6 - 1) / 3 = 1365 > 1000 。
且前5層和341 < 1000,前6層和1365 > 1000,所以最小深度是6?。

二叉樹樹度相關選擇題答案:

1、B


結尾

往期回顧:

【數據結構與算法】數據結構初階:詳解二叉樹(五)——鏈式結構二叉樹(下):二叉樹的鏈式結構的實現

【數據結構與算法】數據結構初階:詳解二叉樹(四)——鏈式結構二叉樹(上):前中后序遍歷、創建一棵鏈式二叉樹

【數據結構與算法】數據結構初階:詳解二叉樹(三)——堆(續):向上向下調整算法的證明及時間復雜度、TOP-K問題詳解

【數據結構與算法】數據結構初階:詳解二叉樹(二)——堆

【數據結構與算法】數據結構初階:詳解二叉樹(一)

【數據結構與算法】數據結構初階:詳解棧和隊列(下)——隊列

【數據結構與算法】數據結構初階:詳解棧和隊列(上)——棧

【數據結構與算法】數據結構初階:詳解順序表和鏈表(五)——雙向鏈表

【數據結構與算法】數據結構初階:詳解順序表和鏈表(四)——單鏈表(下)

【數據結構與算法】數據結構初階:詳解順序表和鏈表(三)——單鏈表(上)

【數據結構與算法】數據結構初階:動態順序表各種方法(接口函數)復盤與整理

結語:本篇文章到這里就結束了,本文講解的選擇題有的很簡單,有的則要想一想。總之,大家一定要自己動手寫一寫,學習之后再實踐,效率翻番!? ? ? ? ? ? ? ??

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

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

相關文章

Android廣播實驗

【實驗目的】了解使用Intent進行組件通信的原理&#xff1b;了解Intent過濾器的原理和匹配機制&#xff1b;掌握發送和接收廣播的方法【實驗內容】任務1、普通廣播&#xff1b;任務2、系統廣播&#xff1b;任務3、有序廣播&#xff1b;【實驗要求】1、練習使用靜態方法和動態方…

html轉word下載

一、插件使用//轉html為wordnpm i html-docx-js //保存文件到本地npm i file-saver 注&#xff1a;vite 項目使用esm模式會報錯&#xff0c;with方法錯誤&#xff0c;修改如下&#xff1a;//直接安裝修復版本npm i html-docx-fixed二、封裝導出 exportWord.jsimport htmlDocx f…

北方公司面試記錄

避免被開盒&#xff0c;先稱之為“北方公司”&#xff0c;有確定結果后再更名。 先說流程&#xff0c;線下面試&#xff0c;時間非常急&#xff0c;下午兩點鐘面試&#xff0c;中午十二點打電話讓我去&#xff0c;帶兩份紙質簡歷。 和一般的菌工單位一樣&#xff0c;先在傳達室…

linux——ps命令

PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND0 1 1 1 ? -1 Ss 0 0:01 /usr/lib/systemd/systemd1 123 123 123 ? -1 S 0 0:00 /usr/sbin/sshd -D123 456 456 456 pts/0 456 R 10…

C#.NET 依賴注入詳解

一、是什么 在 C#.NET 中&#xff0c;依賴注入&#xff08;Dependency Injection&#xff0c;簡稱 DI&#xff09; 是一種設計模式&#xff0c;用于實現控制反轉&#xff08;Inversion of Control&#xff0c;IoC&#xff09;&#xff0c;以降低代碼耦合、提高可測試性和可維護…

Vue監視數據的原理和set()的使用

在 Vue 中&#xff0c;Vue.set()&#xff08;或 this.$set()&#xff09;是用于解決響應式數據更新檢測的重要方法&#xff0c;其底層與 Vue 的數據監視原理緊密相關。以下從使用場景和實現原理兩方面詳細說明&#xff1a;一、Vue.set () 的使用場景與用法1. 為什么需要 Vue.se…

在 Vue 中,如何在回調函數中正確使用 this?

在 Vue 組件中&#xff0c;this 指向當前組件實例&#xff0c;但在回調函數&#xff08;如定時器、異步請求、事件監聽等&#xff09;中&#xff0c;this 的指向可能會丟失或改變&#xff0c;導致無法正確訪問組件的屬性和方法。以下是在回調函數中正確使用 this 的幾種常見方式…

第4章唯一ID生成器——4.4 基于數據庫的自增主鍵的趨勢遞增的唯一ID

基于數據庫的自增主鍵也可以生成趨勢遞增的唯一 ID&#xff0c;且由于唯一ID不與時間戳關聯&#xff0c;所以不會受到時鐘回撥問題的影響。 4.4.1 分庫分表架構 數據庫一般都支持設置自增主鍵的初始值和自增步長&#xff0c;以MySQL為例&#xff0c;自增主鍵的自增步長由auto_i…

設計模式:Memento 模式詳解

Memento 模式詳解Memento&#xff08;備忘錄&#xff09;模式是一種行為型設計模式&#xff0c;用于在不破壞封裝性的前提下&#xff0c;捕獲并外部化一個對象的內部狀態&#xff0c;以便在之后能夠將該對象恢復到原先保存的狀態。它廣泛應用于需要實現撤銷&#xff08;Undo&am…

數據結構(6)單鏈表算法題(下)

一、環形鏈表Ⅰ 1、題目描述 https://leetcode.cn/problems/linked-list-cycle 2、算法分析 思路&#xff1a;快慢指針 根據上圖所示的流程&#xff0c;我們可以推測出這樣一個結論&#xff1a;若鏈表帶環&#xff0c;快慢指針一定會相遇。 那么&#xff0c;這個猜測是否正…

智能制造,從工廠建模,工藝建模,柔性制造,精益制造,生產管控,庫存,質量等多方面講述智能制造的落地方案。

智能制造&#xff0c;從工廠建模&#xff0c;工藝建模&#xff0c;柔性制造&#xff0c;精益制造&#xff0c;生產管控&#xff0c;庫存&#xff0c;質量等多方面講述智能制造的落地方案。

Qt 分裂布局:QSplitter 使用指南

在 GUI 開發中&#xff0c;高效管理窗口空間是提升用戶體驗的關鍵。QSplitter 作為 Qt 的核心布局組件&#xff0c;讓動態分割窗口變得簡單直觀。一、QSplitter 核心功能解析 QSplitter 是 Qt 提供的布局管理器&#xff0c;專用于創建可調節的分割區域&#xff1a; 支持水平/垂…

R語言與作物模型(DSSAT模型)技術應用

R語言在DSSAT模型的氣候、土壤、管理措施等數據準備&#xff0c;自動化模擬和結果分析上都發揮著重要的作用。一&#xff1a;DSSAT模型的高級應用 1.作物模型的概念 2.DSSAT模型發展現狀 3.DSSAT與R語言的安裝 4.DSSAT模型的高級應用案例 5.R語言在作物模型參數優化中的應用 6.…

JavaSE:學習輸入輸出編寫簡單的程序

一、打印輸出到屏幕 Java提供了三種核心輸出方法&#xff0c;適合不同場景&#xff1a; System.out.println() 打印內容后 自動換行 System.out.println("Welcome"); System.out.println("to ISS"); // 輸出&#xff1a; // Welcome // to ISSSystem.out…

訪問者模式感悟

訪問者模式 首先有兩個東西: 一個是訪問者vistor (每一個訪問者類都代表了一類操作) 一個是被訪問者entity (model /info/pojo/node等等這些都行)也就是是說是一個實體類 其操作方法被抽離給了其他類。 訪問者模式的核心思想就是**“把操作從數據結構中分離出來,每種操作…

從零到部署:基于Go和Docker的全棧短鏈接服務實戰(含源碼)

摘要&#xff1a;本文將手把手帶你使用Go語言&#xff0c;并遵循依賴倒置、分層架構等最佳實踐&#xff0c;構建一個高性能、高可用的全棧短鏈接生成器。項目采用Echo框架、GORM、Redis、MySQL&#xff0c;并通過Docker和Docker Compose實現一鍵式容器化部署到阿里云服務器。文…

MyBatis_3

上一篇文章&#xff0c;我們學習了使用XML實現MyBatis進行增、刪、查、改等操作&#xff0c;本篇文章&#xff0c;我們將學習#{ }和${ }獲取方法參數的區別和使用MyBatisXML實現動態SQL語句。 #{ }和${ }的區別 在之前的文章中我們都是使用#{ }進行賦值&#xff0c;但實際上M…

智能圖書館管理系統開發實戰系列(一):項目架構設計與技術選型

項目背景 智能圖書館管理系統&#xff08;ILMS&#xff09;是一個現代化的桌面應用程序&#xff0c;采用前后端分離架構&#xff0c;結合了Web技術的靈活性和桌面應用的用戶體驗。本項目從高保真原型設計開始&#xff0c;經過完整的軟件開發生命周期&#xff0c;最終實現為一個…

應急前端“黃金3分鐘”設計:極端場景下的操作界面極速搭建技術

摘要**地震突發&#xff0c;應急指揮系統的操作界面卻因加載緩慢無法及時調取數據&#xff1b;火災現場&#xff0c;消防員手持終端的操作步驟繁瑣&#xff0c;延誤救援時機。在分秒必爭的極端場景中&#xff0c;傳統前端操作界面為何頻頻 “掉鏈子”&#xff1f;怎樣才能在 “…

【Android】三種彈窗 Fragment彈窗管理

三三要成為安卓糕手 零&#xff1a;布局轉換 在很多工程當中用的都是LinearLayout和relativelayout&#xff0c;這兩者都可以轉化為Constrainlayout 注&#xff1a;這種用法并不能精確轉換&#xff0c;具體還是要根據自己的需求來做布局約束一&#xff1a;snackbar顯示彈窗 ((2…