1. 程式人生 > >終於等到了這篇文章了

終於等到了這篇文章了

JAVA中在 HahsMap 中,在JDK1.8之後,就出現了紅黑樹,那麼我們就得研究一下這個資料結構了,畢竟框架都是對底層進行的封裝,那麼我們一起看一下吧。

二叉樹

二叉樹:二叉樹是每個節點最多有2個子樹的一種資料結構。

我們畫圖來了解一下吧,畢竟畫圖比較清晰。

二叉樹的最高層就是根節點,下面又有很多的子節點,25是15的父節點,而15又是25的子節點,其實就是一個相互的關係, 而15和44又是兄弟節點,但是有一點我們需要注意的地方就是葉子節點, 葉子節點則是紅框裡面的節點,就是沒有子節點的我們就稱它為葉子節點。

 

而在二叉樹中,我們還要理解一個概念,這個概念就是“樹的深度”

樹深度:從根節點開始(深度為0)自最高層往下遞增,在上面的圖中我們可以知道,25的深度是0, 15和44深度是1,10,20,21和27的樹深度是2,依次會遞增。

這是二叉樹的幾個我們需要了解的概念性的知識。

而二叉樹也是有分類的:

滿二叉樹

除最後一層無任何子節點外,每一層上的所有節點都有兩個子節點,最後一層都是葉子節點。

1.假設我們樹的深度是h,最大層數是k,那滿二叉樹就是h=k。

2.而我們滿二叉樹的葉子節點數也就是最後面的一層是2的k-1次方。

3.而二叉樹的總節點數也一點會是奇數。

這也是滿二叉樹的性質。

完全二叉樹

若設二叉樹的深度為h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第 h 層所有的結點都連續集中在最左邊,這就是完全二叉樹。

我們來看看圖

1.完全二叉樹只允許最後一層有空缺結點且空缺在右邊,即葉子節點只能在層次最大的兩層上出現;

2.而且對任意一個節點,如果其右子樹的深度為j,則其左子樹的深度必為j或j+1 即度為1的點只有1個或0個;

3.有n個節點的完全二叉樹,其深度為:log2的n+1次方;

4.滿二叉樹一定是完全二叉樹,完全二叉樹不一定是滿二叉樹。

平衡二叉樹

又被稱為AVL樹,它是一顆空樹或左右兩個子樹的高度差的絕對值不超過 1,並且左右兩個子樹都是一棵平衡二叉樹。

我們看一下圖

二叉搜尋樹

二叉搜尋樹又稱二叉查詢樹、二叉排序樹(Binary Sort Tree)。

我們來看看它又是什麼鬼樣子。

1.二叉搜尋樹若左子樹不空,則左子樹上所有節點的值均小於或等於它的根節點的值;

2.左、右子樹也分別為二叉排序樹;

3.若右子樹不空,則右子樹上所有節點的值均大於或等於它的根節點的值;

還有就是在HashMap裡面存在的紅黑樹。

紅黑樹

紅黑樹就是每個節點都帶有顏色屬性,顏色或者是紅色或者是黑色的平衡二叉查詢樹, 我們看看它是什麼樣子滴。

1.紅黑樹節點是紅色或黑色;

2.根節點是黑色;

3.所有葉子節點都是黑色;

4.從任一節點到其每個葉子的所有簡單路徑都包含相同數目的黑色節點。

5.每個紅色節點必須有兩個黑色的子節點。(從每個葉子到根的所有路徑上不能有兩個連續的紅色節點)

我們再來看一下這個樹結構是怎麼實現遍歷的?

二叉樹遍歷分為前序、中序、後序遞迴和非遞迴遍歷、還有層序遍歷。

用程式碼解釋肯定是不太可能,畢竟程式碼寫出來的都是模仿寫的, 我們用畫圖來解釋:

為什麼會叫這個名字?是根據根節點的順序命名的。

我們用最簡單的圖:

比如上圖正常的一個滿節點,A:根節點、B:左節點、C:右節點;

前序順序是ABC(根節點排最先,然後同級先左後右);

中序順序是BAC(先左後根最後右);

後序順序是BCA(先左後右最後根)。

在我們上圖中,見我們的前序,中序,後序遍歷結構是什麼呢?

前序遍歷:A B C D E F G H I

中序遍歷:B D C A E H G I F

後序遍歷:D C B H I G F E A

總結

二叉樹是一棵樹,且每個節點都不能有多於兩個的兒子,且二叉樹的子樹有左右之分,次序不能顛倒。 二叉樹的遍歷分為以下三種:

先序遍歷:遍歷順序規則為根左右

中序遍歷:遍歷順序規則為左根右

後序遍歷:遍歷順序規則為左右根

 


 

Java 極客技術公眾號,是由一群熱愛 Java 開發的技術人組建成立,專注分享原創、高質量的 Java 文章。如果您覺得我們的文章還不錯,請幫忙讚賞、在看、轉發支援,鼓勵我們分享出更好的文章。

關注公眾號,大家可以在公眾號後臺回覆“部落格園”,免費獲得作者 Java 知識體系/面試必看資料。 

相關推薦

終於等到文章

JAVA中在 HahsMap 中,在JDK1.8之後,就出現了紅黑樹,那麼我們就得研究一下這個資料結構了,畢竟框架都是對底層進行的封裝,那麼我們一起看一下吧。 二叉樹 二叉樹:二叉樹是每個節點最多有2個子樹的一種資料結構。 我們畫圖來了解一下吧,畢竟畫圖比較清晰。 二叉樹的最高層就是根節點,下面

今天跟人討論推薦算法,又看文章,復習一下

mar quest margin ica target tar height pan gin p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px } p.p2

聽說看文章就徹底搞懂什麽是OPC(上)

文檔 files 兩個 tool 共存 硬件 信息 更改 消息 從2000年初以來,我們就一直在使用OPC軟件互操作性標準,而那些正準備踏入和想要踏入工業自動化領域的人們卻對這些含義感到困惑。 所以在本中,我將系統地為你梳理OPC知識。 OPC首字母縮寫詞代表什麽? 問一

我的老板給我推送文章,之後我成為頂級碼農!

mod oracl 默認 tar 重新啟動 界面 lis 網頁服務器 cte 歡迎大家前往騰訊雲+社區,獲取更多騰訊海量技術實踐幹貨哦~ 本文來自雲計算教程系列,由穿鞋跑得快編譯。 介紹 代碼質量是特定代碼片段的有用性和可維護性的近似值。質量代碼將使維護和擴展應用程序的

多虧文章,我的開發效率遠遠領先於我的同事

讓我 項目 gic 手冊 nlp 同事 變化 num 知識 歡迎大家前往騰訊雲+社區,獲取更多騰訊海量技術實踐幹貨哦~ 本文由獨木橋先生發表於雲+社區專欄 介紹 如果您有從Linux服務器上的源代碼安裝軟件的經驗,您可能會遇到make實用程序。該工具主要用於自動編譯和構

爬蟲工程師熬夜寫文章,關於Python爬蟲的一些方法總結!

  爬蟲原理與資料抓取 Requests簡單使用 新增 headers 和 查詢引數                 學習Python中有不明白推薦加入交流群    

文章,你將變身web分析大師

document 包含 快速 第一時間 ins cdn 問題 打不開 metrics 歡迎大家前往騰訊雲+社區,獲取更多騰訊海量技術實踐幹貨哦~ 本文由shirishiyue發表於雲+社區專欄 1、工具介紹 ? 這是一個非常詳細且專業的web頁面性能分析工

一名3年工作經驗的程式設計師應該具備的技能(寫得很好,果斷轉) 因為和同事有約定再加上LZ自己也喜歡做完一件事之後進行總結,因此有了這篇文章這篇文章大部分內容都是面向整個程式設計師群體的,當然因為LZ本身是做Java開發的,因此有一部分內容也是專門面向咱們Java程式設計師的。

因為和同事有約定再加上LZ自己也喜歡做完一件事之後進行總結,因此有了這篇文章。這篇文章大部分內容都是面向整個程式設計師群體的,當然因為LZ本身是做Java開發的,因此有一部分內容也是專門面向咱們Java程式設計師的。 簡單先說一下,LZ座標杭州,13屆本科畢業,算上年前在阿

純乾貨!看文章就能掌握量化投資技術!

今天我們來一起看一下量化投資技術的五個環節。量化投資是將投資者的投資理念通過引數設計,最終體現在模型當中。然後通過計算機進行排除人性干擾因素的投資方式。相對於傳統的投資方式,量化投資具有效率高、免人為情緒干擾、個股與組合平衡以及收益與風險平衡等幾大特點。投資的各個環節我們都可以應用量化投資技術。例如:績效評估

如果看文章你還不懂傅立葉變換,那就過來掐死我吧~~

本文轉載至https://zhuanlan.zhihu.com/p/19763358,原創作者韓昊,轉載宣告:謹以此文獻給大連海事大學的吳楠老師,柳曉鳴老師,王新年老師以及張晶泊老師。     我保證這篇文章和你以前看過的所有文章都不同,這是 2012 年還在果殼的時候

Linux優化不知如何下手?那你的看看文章

這些問題或者場景,你是否曾經遇到過? 流量高峰期,伺服器CPU使用率過高報警,你登入Linux上去top完之後,卻不知道怎麼進一步定位,到底是系統CPU資源太少,還是程式併發部分寫的有問題? 系統並沒有跑什麼吃記憶體的程式,但是敲完free命令之後,卻發現系統已經沒有什麼記憶體了,那到底是哪

狗年想有所成就?那你就要看文章

關注「實驗樓」,每天分享一個專案教程   剛過完春節假期,重新回到工作崗位,新的一年,有什麼打算

如果看文章還不懂卷積,那就過來掐死我吧

卷積 最近總是和卷積打交道,工作需要,每天都要碰到它好幾次,不勝煩惱,因為在大學時候學訊號與系統的時候就沒學會,我於是心想一定要把卷積完全搞明白。正好同辦公室的同學也問我什麼是卷積,師姐昨天也告訴我說:"我也早就想把這個問題搞明白了!"經過一段時間的思考之後,有一些很

什麽是5G,看文章你就徹底懂

推出 ext 世界 障礙 amp 設備 文字 革命 http 人類已經經歷了六次信息技術革命為: 第一次:語言的使用 讓信息可以分享 第二次:文字的創造 讓信息可以記錄 第三次:印刷術的發明 讓信息可以傳得更遠 第四次:無線電的發明 讓信息可以遠距離實時

復現一深度強化學習論文之前請先看文章

挑戰 思路 shel 另一個 接受 永遠 img you 圖表 去年,OpenAI和DeepMind聯手做了當時最酷的實驗,不用經典的獎勵信號來訓練智能體,而是根據人類反饋進行強化學習的新方法。有篇博客專門講了這個實驗 Learning from Human Pr

【Nginx】面試官竟然問我Nginx如何生成縮圖,還好我看文章!!

## 寫在前面 > 今天想寫一篇使用Nginx如何生成縮圖的文章,想了半天題目也沒想好,這個題目還是一名讀者幫我起的。起因就是這位讀者最近出去面試,面試官正好問了一個Nginx如何生成縮圖的問題。還別說,就是這麼巧呀!!就衝這標題,也要寫一篇乾貨滿滿的技術好文!! > > 關於Nginx的

想理解JVM看文章,就知道!(一)

## 前言 ​ 本章節屬於Java進階系列,前面關於設計模式講解完了,有興趣的童鞋可以翻看之前的博文,後面會講解JVM的優化,整個系列會完整的講解整個java體系與生態相關的中介軟體知識。本次將對jvm有更深入的學習,我們不僅要讓程式能跑起來,而且是可以跑的更快!可以分析解決在生產環境中所遇到的各種“棘手”

Java進階專題(十一) 想理解JVM看文章,就知道!(中)

## 前言 ​ 上次講解了JVM記憶體相關知識,今天繼續JVM專題。 ## JVM垃圾回收演算法 ### 什麼是垃圾回收 ​ 程式的執行必然需要申請記憶體資源,無效的物件資源如果不及時處理就會一直佔有記憶體資源,最終將導致記憶體溢位,所以對記憶體資源的管理是非常重要了。 ### 什麼樣的物件需要回收

看完文章之後,終於明白編譯到底怎麼回事。

看完這篇文章之後,終於明白了編譯到底怎麼回事。 1 對於同一個語句,有如下三種:高階語言、低階語言、機器語言的表示 C語言  a=b+1; 組合語言  mov -0xc(%ebp),%eax add $0x1,%eax mov %eax,-0x8(%ebp) 機

詳解|寫完文章終於搞懂連結串列

> 一覽:本文從零介紹鏈式儲存結構的線性表——單鏈表。包括以下內容: > > - 什麼是鏈式儲存儲存結構? > - 單鏈表的結構 > - 辨析頭結點、頭指標等易混淆概念 > - 基本的增刪改查操作(不帶頭結點和帶頭結點) > - 單鏈表與順序表的對比 # 線性表的鏈