1. 程式人生 > 其它 >位元組面試官:1200頁文件筆記

位元組面試官:1200頁文件筆記

位元組面試官:1200頁文件筆記

二叉樹

定義

二叉樹n(n>=0)個結點的有限集合,該集合或者為空集(稱為空二叉樹),或者由一個根結點和兩棵互不相交的、分別稱為根結點的左子樹和右子樹組成。

圖解

二叉樹特點

由二叉樹定義以及圖示分析得出二叉樹有以下特點:

  1. 每個結點最多有兩顆子樹,所以二叉樹中不存在度大於2的結點。
  2. 左子樹和右子樹是有順序的,次序不能任意顛倒。
  3. 即使樹中某結點只有一棵子樹,也要區分它是左子樹還是右子樹。

二叉樹性質

由二叉樹定義以及圖示分析得出二叉樹有以下性質:

  1. 若對含 n 個結點的完全二叉樹從上到下且從左至右進行 1 至 n 的編號,則對完全二叉樹中任意一個編號為 i 的結點有如下特性:

  • 若 i=1,則該結點是二叉樹的根,無雙親, 否則,編號為 [i/2] 的結點為其雙親結點;
  • 若 2i>n,則該結點無左孩子, 否則,編號為 2i 的結點為其左孩子結點;
  • 若 2i+1>n,則該結點無右孩子結點, 否則,編號為2i+1 的結點為其右孩子結點。

斜樹

定義

斜樹:所有的結點都只有左子樹的二叉樹叫左斜樹。所有結點都是隻有右子樹的二叉樹叫右斜樹。這兩者統稱為斜樹。

滿二叉樹

圖解

定義

滿二叉樹:在一棵二叉樹中。如果所有分支結點都存在左子樹和右子樹,並且所有葉子都在同一層上,這樣的二叉樹稱為滿二叉樹。

滿二叉樹的特點

滿二叉樹的特點有:

  1. 葉子只能出現在最下一層。出現在其它層就不可能達成平衡。
  2. 非葉子結點的度一定是2。
  3. 在同樣深度的二叉樹中,滿二叉樹的結點個數最多,葉子數最多。

完全二叉樹

圖解

定義

完全二叉樹:對一顆具有n個結點的二叉樹按層編號,如果編號為i(1<=i<=n)的結點與同樣深度的滿二叉樹中編號為i的結點在二叉樹中位置完全相同,則這棵二叉樹稱為完全二叉樹。

完全二叉樹特點

特點

  1. 葉子結點只能出現在最下層和次下層。
  2. 最下層的葉子結點集中在樹的左部。
  3. 倒數第二層若存在葉子結點,一定在右部連續位置。
  4. 如果結點度為1,則該結點只有左孩子,即沒有右子樹。
  5. 同樣結點數目的二叉樹,完全二叉樹深度最小。
  6. :滿二叉樹一定是完全二叉樹,但反過來不一定成立。

二叉樹的儲存結構

定義

二叉樹的順序儲存結構就是使用一維陣列儲存二叉樹中的結點,並且結點的儲存位置,就是陣列的下標索引。

圖解

如圖一棵完全二叉樹按照順序儲存:

二叉樹遍歷

定義

二叉樹的遍歷是指從二叉樹的根結點出發,按照某種次序依次訪問二叉樹中的所有結點,使得每個結點被訪問一次,且僅被訪問一次。

訪問次序

二叉樹的訪問次序可以分為四種:

  1. 前序遍歷 根結點 > 左子樹 > 右子樹
  2. 中序遍歷 左子樹> 根結點 > 右子樹
  3. 後序遍歷 左子樹 > 右子樹 > 根結點
  4. 層序遍歷 僅僅需按層次遍歷就可以

圖解

前序遍歷

定義

前序遍歷通俗的說就是從二叉樹的根結點出發,當第一次到達結點時就輸出結點資料,按照先向左在向右的方向訪問。

遍歷流程
1、從根結點出發,則第一次到達結點A,故輸出A;
2、繼續向左訪問,第一次訪問結點B,故輸出B;
3、按照同樣規則,輸出D,輸出H;
4、當到達葉子結點H,返回到D,此時已經是第二次到達D,故不在輸出D,進而向D右子樹訪問,D右子樹不為空,則訪問至I,第一次到達I,則輸出I;
5、I為葉子結點,則返回到D,D左右子樹已經訪問完畢,則返回到B,進而到B右子樹,第一次到達E,故輸出E;
6、向E左子樹,故輸出J;
7、按照同樣的訪問規則,繼續輸出C、F、G;
遍歷結果

前序遍歷輸出為:ABDHIEJCFG

中序遍歷

定義

中序遍歷就是從二叉樹的根結點出發,當第二次到達結點時就輸出結點資料,按照先向左在向右的方向訪問。

遍歷流程
1、從根結點出發,則第一次到達結點A,不輸出A,繼續向左訪問,第一次訪問結點B,不輸出B;繼續到達D,H;
2、到達H,H左子樹為空,則返回到H,此時第二次訪問H,故輸出H;
3、H右子樹為空,則返回至D,此時第二次到達D,故輸出D;
4、由D返回至B,第二次到達B,故輸出B;
5、按照同樣規則繼續訪問,輸出J、E、A、F、C、G;
遍歷結果

中序遍歷輸出為:HDIBJEAFCG

最後

面試題文件來啦,內容很多,485頁!

由於筆記的內容太多,沒辦法全部展示出來,下面只擷取部分內容展示。有想獲取完整版筆記的朋友,點贊後點擊這裡免費領取哦

1111道Java工程師必問面試題

MyBatis 27題 + ZooKeeper 25題 + Dubbo 30題:

Elasticsearch 24 題 +Memcached +?Redis 40題:

Spring 26 題+ 微服務 27題+ Linux 45題:

Java面試題合集: