Java數據結構第十二期:走進二叉樹的奇妙世界(一)

專欄:數據結構(Java版)

個人主頁:手握風云

目錄

一、樹型結構

1.1. 樹的定義

1.2. 樹的基本概念

1.3.?樹的表示形式

二、二叉樹

2.1. 概念

2.2. 兩種特殊的二叉樹

2.3. 二叉樹的性質

2.4. 二叉樹的存儲

三、二叉樹的基本操作


一、樹型結構

1.1. 樹的定義

? ? ? ? 樹是?種?線性的數據結構,它是由n(n>=0)個有限結點組成?個具有層次關系的集合。把它叫做 樹是因為它看起來像?棵倒掛的樹,也就是說它是根朝上,?葉朝下的。它具有以下的特點:

  1. 有?個特殊的結點,稱為根結點,根結點沒有前驅結點
  2. 除根結點外,其余結點被分成M(M > 0)個互不相交的集合T1、T2、......、Tm,其中每?個集合Ti (1 <= i <= m) ?是?棵與樹類似的?樹。每棵?樹的根結點有且只有?個前驅,可以有0個或多個后繼
  3. 樹是遞歸定義的

? ? ? ?注意,在樹型結構中,子樹與子樹之間不能有交集,否則就不是樹型結構。

1.2. 樹的基本概念

結點的度:?個結點含有?樹的個數稱為該結點的度; 如上圖,A的度為2

樹的度:?棵樹中,所有結點度的最?值稱為樹的度;如上圖,樹的度為3

葉子結點或終端結點:度為0的結點稱為葉結點;如上圖,G、H、I、J都是葉結點

父結點:若?個結點含有?結點,則這個結點稱為其?結點的?結點;如上圖,A是B的父節點

子結點:?個結點含有的?樹的根結點稱為該結點的?結點; 如上圖,B是A的子結點

根結點:?棵樹中,沒有父結點的結點;如上圖,A

結點的層次:從根開始定義起,根為第1層,根的?結點為第2層,以此類推

樹的高度或深度:樹中結點的最大層次;如上圖,樹的高度是4

1.3.?樹的表示形式

? ? ? ?樹結構相對線性表就比較復雜了,要存儲表示起來就?較麻煩了,實際中樹有很多種表示?式,如:雙親表示法,孩子表示法、孩子雙親表示法、孩子兄弟表示法等等。我們這?就簡單的了解其中最常用的孩子兄弟表示法。

class Node{int val;//樹中儲存的數據Node firstChild;//第一個孩子引用Node nextBrother;//下一個兄弟引用
}

二、二叉樹

2.1. 概念

? ? ? ? 一棵二叉樹是結點的一個有限集合,該集合或者為空,或者是由一個根節點加上兩棵別稱為左子樹和右子樹的?叉樹組成。

? ? ? ?從上圖中可以看出:?叉樹不存在度?于2的結點;?叉樹的?樹有左右之分,次序不能顛倒,因此?叉樹是有序樹。

? ? ? ?注意:對于任意的?叉樹都是由以下?種情況復合?成的。

2.2. 兩種特殊的二叉樹

  1. 滿二叉樹:如果一棵二叉樹的層數為K,且結點總數是2^{k}-1 ,則它就是滿?叉樹。
  2. 完全二叉樹:完全?叉樹是由滿?叉樹?引出來的。對于深度 為K的,有n個結點的?叉樹,當且僅當其每?個結點都與深度為K的滿?叉樹中編號從0?n-1的結點一一對應。滿二叉樹是一種特殊的完全二叉樹。

2.3. 二叉樹的性質

  1. 若規定根結點的層數為1,則?棵?空?叉樹的第i層上最多有(i>0)個結點
  2. 若規定只有根結點的?叉樹的深度為1,則深度為K的?叉樹的最?結點數是(k>=0)
  3. 對任何?棵?叉樹, 如果其葉結點個數為 n0, 度為2的?葉結點個數為 n2,則有n0=n2+1
  4. 具有n個結點的完全?叉樹的深度k為上取整

2.4. 二叉樹的存儲

? ? ? ? 二叉樹的存儲方式分為:順序結構和類似于鏈式的結構。我們這里主要介紹鏈式存儲。?叉樹的鏈式存儲是通過?個?個的節點引?起來的。

//孩子表示法
class Node{int val;//數據域Node left;//左孩子引用Node right;//右孩子引用
}//孩子雙親表示法
class Node{int val;Node left;Node right;Node parent;//當前節點的根節點
}

三、二叉樹的基本操作

我們可以自己創建一個二叉樹,我們可以參照之前創建鏈表、棧、隊列的方式來手動創建二叉樹。

public class BinaryTree {static class TreeNode{public char val;public TreeNode left;//左孩子結點引用public TreeNode right;//右孩子結點引用public TreeNode(char val) {this.val = val;}}public TreeNode CreateTree(){TreeNode A = new TreeNode('A');TreeNode B = new TreeNode('B');TreeNode C = new TreeNode('C');TreeNode D = new TreeNode('D');TreeNode E = new TreeNode('E');TreeNode F = new TreeNode('F');TreeNode G = new TreeNode('G');TreeNode H = new TreeNode('H');A.left = B;A.right = C;B.left = D;B.right = E;C.left = F;C.right = G;E.right = H;return A;}
}
public class Test {public static void main(String[] args) {BinaryTree binaryTree = new BinaryTree();BinaryTree.TreeNode root = binaryTree.CreateTree();//因為是靜態內部類System.out.println("========");}
}

? ? ? ? 我們在打印這一行大一個斷點進行調試。先走完A結點,再通過遞歸的方法,去遍歷左孩子結點B和右孩子結點C,以此類推,再去遍歷B的左孩子結點E和右孩子結點F。

? ? ? ?二叉樹可以空樹也可以是非空樹。非空樹由根節點的左子樹、根節點的右子樹組成的。從概念中可以看出,?叉樹定義是遞歸式的,因此后序基本操作中基本都是按照該概念實現的。

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

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

相關文章

匹配算法:向下就近原則,向下沒有就向上

匹配算法&#xff1a;向下就近原則&#xff0c;向下沒有就向上 實現方式一實現方式二總結 實現方式一 private static List<Integer> findMatches(List<Integer> sourceList, List<Integer> searchValues) {List<Integer> sortedList sourceList.stre…

基于 Python Django 的校園互助平臺(附源碼,文檔)

博主介紹&#xff1a;?Java徐師兄、7年大廠程序員經歷。全網粉絲13w、csdn博客專家、掘金/華為云等平臺優質作者、專注于Java技術領域和畢業項目實戰? &#x1f345;文末獲取源碼聯系&#x1f345; &#x1f447;&#x1f3fb; 精彩專欄推薦訂閱&#x1f447;&#x1f3fb; 不…

IP地址 vs 域名:分布式系統中的服務尋址之爭

在分布式系統中&#xff0c;服務之間的通信是核心問題之一。如何高效、穩定地找到目標服務&#xff0c;是每個開發者都需要面對的挑戰。常見的服務尋址方式有兩種&#xff1a;IP地址 和 域名。這兩種方式各有優劣&#xff0c;適用于不同的場景。本文將從性能、穩定性、動態性、…

【技術筆記】Cadence 創建元器件 Pin 引腳的創建與設置

【技術筆記】Cadence 創建元器件 Pin 引腳設置 一、管腳 Pin 放置方式1. 直接放置&#xff08;快捷鍵【Shift】【G】&#xff09;2. 按照Pin陣列放置引腳&#xff08;快捷鍵【Shift】【J】&#xff09;3. 通過Excel表格創建元器件 二、引腳屬性設置1. 創建Pin設置&#xff0c;E…

java面試場景問題

還在補充&#xff0c;這幾天工作忙&#xff0c;閑了會把答案附上去&#xff0c;也歡迎各位大佬評論區討論 1.不用分布式鎖如何防重復提交 方法 1&#xff1a;基于唯一請求 ID&#xff08;冪等 Token&#xff09; 思路&#xff1a;前端生成 一個唯一的 requestId&#xff08;…

Windows11安裝GPU版本Pytorch2.6教程

1: 準備工作 針對已經安裝好的Windows11系統&#xff0c;先檢查Nvidia驅動和使用的CUDA版本情況。先打開Windows PowerShell&#xff0c;通過nvidia-smi命令查看GPU的情況&#xff0c;結果如下圖1所示&#xff0c;從結果中可知使用的CUDA版本為12.8。 圖1&#xff1a;檢測安裝…

深入了解Text2SQL開源項目(Chat2DB、SQL Chat 、Wren AI 、Vanna)

深入了解Text2SQL開源項目&#xff08;Chat2DB、SQL Chat 、Wren AI 、Vanna&#xff09; 前言 1.Chat2DB2.SQL Chat3.Wren AI4.Vanna 前言 在數據驅動決策的時代&#xff0c;將自然語言查詢轉化為結構化查詢語言&#xff08;SQL&#xff09;的能力變得日益重要。無論是小型…

go 環境準備

配置路徑&#xff1a; GOROOT&#xff1a;D:\GoGOPATH&#xff1a;go的工作目錄 D:\workspacego 驗證版本&#xff1a;go version 配置第三方倉庫&#xff1a; GO111MODULE&#xff1a;開啟mod模式GOPROXY&#xff1a;go語言三方庫地址GOSUMDB&#xff1a;go語言軟件包的M…

Qt/C++項目積累:3.日志管理系統 - 3.1 項目介紹

在實際工程項目中&#xff0c;日志系統無疑是比較重要地分析問題的手段&#xff0c;常用的一般是將其寫入到日志文件中&#xff0c;或者寫入數據庫文件&#xff0c;進行分析&#xff0c;而工程人員或者開發人員需要實時查看日志&#xff0c;可能不太方便&#xff0c;于是就需要…

netty十八羅漢之——挖耳羅漢(Decoder)

佛教中除不聽各種淫邪聲音之外&#xff0c;更不可聽別人的秘密。因他論耳根最到家&#xff0c;故取挖耳之形&#xff0c;以示耳根清凈。 來看看netty的核心組件解碼器Decoder Decoder的作用半包&#xff0c;粘包問題從模板和裝飾器模式看Decoder解碼原理 1.Decoder作用 最根本…

51單片機學習之旅——定時器

打開軟件 1與其它等于其它&#xff0c;0與其它等于0 1或其它等于1&#xff0c;0或其它等于其它 TMODTMOD&0xF0;//0xF01111 0000進行與操作&#xff0c;高四位保持&#xff0c;低四位清零&#xff0c;高四位定時器1&#xff0c;低四位定時器0 TMODTMOD|0x01;//0x010000 0…

內容中臺重構智能服務:人工智能技術驅動精準決策

內容概要 現代企業數字化轉型進程中&#xff0c;內容中臺與人工智能技術的深度融合正在重構智能服務的基礎架構。通過整合自然語言處理、知識圖譜構建與深度學習算法三大技術模塊&#xff0c;該架構實現了從數據采集到決策輸出的全鏈路智能化。在數據層&#xff0c;系統可對接…

【redis】redis內存管理,過期策略與淘汰策略

一&#xff1a;Redis 的過期刪除策略及處理流程如下&#xff1a; 1. 過期刪除策略 Redis 通過以下兩種策略刪除過期鍵&#xff1a; 1.1 惰性刪除 觸發時機&#xff1a;當客戶端訪問某個鍵時&#xff0c;Redis 會檢查該鍵是否過期。執行流程&#xff1a; 客戶端請求訪問鍵。…

tp6上傳文件大小超過了最大值+驗證文件上傳大小和格式函數

問題&#xff1a; 最近用tp6的文件上傳方法上傳文件時報文件過大錯誤。如下所示&#xff1a; $file $this->request->file(file);{"code": 1,"msg": "上傳文件大小超過了最大值&#xff01;","data": {"code": 1,&q…

Kreuzberg:本地OCR+多格式解析!Kreuzberg如何用Python暴力提取30+文檔格式?程序員看完直呼內行!

嗨&#xff0c;大家好&#xff0c;我是小華同學&#xff0c;關注我們獲得“最新、最全、最優質”開源項目和高效工作學習方法 我們經常需要從各種不同類型的文檔中提取文本內容&#xff0c;無論是辦公文檔、圖像還是PDF文件。而Kreuzberg這個Python庫的出現&#xff0c;為我們提…

Windows程序設計29:對話框之間的數據傳遞

文章目錄 前言一、父子對話框之間的數據傳遞1.父窗口獲取子窗口數據2.子窗口獲取父窗口數據 二、類外函數調用窗口的操作1.全局變量方式2.參數傳遞方式 總結 前言 Windows程序設計29&#xff1a;對話框之間的數據傳遞。 在Windows程序設計28&#xff1a;MFC模態與非模態對話框…

【C語言】第八期——指針

目錄 1 初始指針 2 獲取變量的地址 3 定義指針變量、取地址、取值 3.1 定義指針變量 3.2 取地址、取值 4 對指針變量進行讀寫操作 5 指針變量作為函數參數 6 數組與指針 6.1 指針元素指向數組 6.2 指針加減運算&#xff08;了解&#xff09; 6.2.1 指針加減具體數字…

為 Power Automate 注冊 Adobe PDF Services

前言 最近&#xff0c;再測試如何將HTML轉換成PDF&#xff0c;然后發現Adobe有一個免費的操作可以用&#xff0c;好開心&#xff0c;趕緊注冊一下。 正文 1.先注冊一個賬號&#xff0c;然后登錄到Adobe Developer 注冊鏈接&#xff1a;https://www.adobe.com/go/getstarted_pow…

BY組態:工業自動化的未來,觸手可及

1. BY組態軟件的核心優勢 簡單易用&#xff1a;圖形化界面&#xff0c;降低學習成本&#xff0c;快速上手。 高效靈活&#xff1a;支持多種設備協議&#xff0c;兼容性強&#xff0c;適用于多種行業。 實時監控&#xff1a;提供實時數據采集與可視化&#xff0c;助力高效決策…

有哪些開源大數據處理項目使用了大模型

以下是一些使用了大模型的開源大數據處理項目&#xff1a; 1. **RedPajama**&#xff1a;這是一個開源項目&#xff0c;使用了LLM大語言模型數據處理組件&#xff0c;對GitHub代碼數據進行清洗和處理。具體流程包括數據清洗、過濾低質量樣本、識別和刪除重復樣本等步驟。 2. …