国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

算法與數(shù)據(jù)結(jié)構(gòu)(五)--二叉樹入門

這篇具有很好參考價值的文章主要介紹了算法與數(shù)據(jù)結(jié)構(gòu)(五)--二叉樹入門。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

符號表的增刪查操作,隨著元素個數(shù)N的增多,其耗時也是線性增多的,時間復(fù)雜度都是O(n),為了提高運算效率,我們學(xué)習(xí)樹這種數(shù)據(jù)結(jié)構(gòu)。

目錄

一.樹的基本定義

二.樹的相關(guān)術(shù)語

三.二叉樹的基本定義

四.二叉樹的鏈表實現(xiàn)

1.二叉樹結(jié)點類

結(jié)點類API設(shè)計:?編輯

代碼實現(xiàn):

2.二叉樹API設(shè)計?編輯

3.二叉樹實現(xiàn)思想

五.二叉樹的基礎(chǔ)遍歷

前序遍歷

中序遍歷

后序遍歷

六.二叉樹的層序遍歷

七.二叉樹的最大深度問題

總結(jié)


一.樹的基本定義

樹是由n(n>=1)個有限結(jié)點組成一個具有層次關(guān)系的集合。把它叫做樹是因為它看起來像一顆倒掛的樹,也就是說它是根朝上,而葉朝下的。

算法與數(shù)據(jù)結(jié)構(gòu)(五)--二叉樹入門,數(shù)據(jù)結(jié)構(gòu)?

?樹具有以下特點:
1.每個結(jié)點有零個或多個子結(jié)點;
2.沒有父結(jié)點的結(jié)點為根節(jié)點;
3.每一個非根結(jié)點只有一個父結(jié)點;
4.每個結(jié)點及其后代結(jié)點整體上可以看做是一棵樹,成為當(dāng)前結(jié)點的父結(jié)點的一個子樹;

二.樹的相關(guān)術(shù)語

結(jié)點的度:
一個結(jié)點含有的子樹的個數(shù)稱為該結(jié)點的度
葉結(jié)點:
度為0的結(jié)點稱為葉結(jié)點,也可以叫做終端結(jié)點;
分支結(jié)點:
度不為0的結(jié)點稱為分支結(jié)點,也可以叫做非終端結(jié)點
結(jié)點的層次:
從根結(jié)點開始,根結(jié)點的層次為1,根的直接后繼層次為2,以此類推
結(jié)點的層序編號:
從樹中的結(jié)點,按照從上層到下層,同層從左到右的次序排成一個線性序列,把他們編成連續(xù)的自然數(shù)。
樹的度:
樹中所有結(jié)點的度的最大值
樹的高度(深度):
樹中結(jié)點的最大層次
森林:
m(m>=0)個互不相交的樹的集合,將一個非空樹的根結(jié)點刪去,樹就變成了一個森林;給森林增加一個統(tǒng)一的根結(jié)點,森林就變成了一棵樹。
算法與數(shù)據(jù)結(jié)構(gòu)(五)--二叉樹入門,數(shù)據(jù)結(jié)構(gòu)

孩子結(jié)點:
一個結(jié)點的直接后繼結(jié)點稱為該結(jié)點的孩子結(jié)點
雙親結(jié)點(父節(jié)點):
一個結(jié)點的直接前驅(qū)稱為該結(jié)點的雙親結(jié)點
兄弟結(jié)點:
同一雙親結(jié)點的孩子結(jié)點間互稱兄弟結(jié)點

三.二叉樹的基本定義

二叉樹就是度不超過2的樹(每個結(jié)點最多有兩個子結(jié)點)
算法與數(shù)據(jù)結(jié)構(gòu)(五)--二叉樹入門,數(shù)據(jù)結(jié)構(gòu)

滿二叉樹:
一個二叉樹,如果每一個層的結(jié)點樹都達(dá)到最大值,則這個二叉樹就是滿二叉樹。
算法與數(shù)據(jù)結(jié)構(gòu)(五)--二叉樹入門,數(shù)據(jù)結(jié)構(gòu)

完全二叉樹:
葉節(jié)點只能出現(xiàn)在最下層和次下層,并且最下面一層的結(jié)點都集中在蓋層最左邊的若干位置的二叉樹。
算法與數(shù)據(jù)結(jié)構(gòu)(五)--二叉樹入門,數(shù)據(jù)結(jié)構(gòu)

四.二叉樹的鏈表實現(xiàn)

1.二叉樹結(jié)點類

按照面向?qū)ο蟮乃枷耄覀冊O(shè)計一個結(jié)點類來描述結(jié)點這個事物。

代碼實現(xiàn)

public class Node <Key,Vaule>{
    //存儲鍵
    public Key key;
    //存儲值
    public Value vaule;
    //記錄左子結(jié)點
    public Node left;
    //記錄右子結(jié)點
    public Node right;
}

二叉樹存儲既可以使用鏈表也可以使用數(shù)組,使用數(shù)組直接把上面的左子樹和右子樹結(jié)點換成int類型的下標(biāo)值即可。

3.二叉樹API設(shè)計

其他補充api:
private Node min(Node x)? ? ? ? 找出指定樹x中,最小鍵所在的結(jié)點
private Node max(Node x)? ? ? ? 找出指定樹x中,最大鍵所在的結(jié)點

4.二叉樹API實現(xiàn)思想

插入方法put實現(xiàn)思想:
1.如果當(dāng)前樹中沒有任何一個結(jié)點,則直接把新結(jié)點當(dāng)做根結(jié)點使用
2.如果當(dāng)前樹不為空,則從根結(jié)點開始:
2.1 如果新結(jié)點的key小于當(dāng)前結(jié)點的key,則繼續(xù)找當(dāng)前結(jié)點的左子結(jié)點
2.2 如果新結(jié)點的key大于當(dāng)前結(jié)點的key,則繼續(xù)找當(dāng)前結(jié)點的右子結(jié)點
2.3 如果新結(jié)點等于當(dāng)前結(jié)點的key,則樹中已經(jīng)存在這樣的結(jié)點,替換該結(jié)點的value值即可。

算法與數(shù)據(jù)結(jié)構(gòu)(五)--二叉樹入門,數(shù)據(jù)結(jié)構(gòu)

查詢方法get實現(xiàn)思想:

從根節(jié)點開始:
1.如果要查詢的key小于當(dāng)前結(jié)點的key,則繼續(xù)找當(dāng)前結(jié)點的左子結(jié)點;
2.如果要查詢的key大于當(dāng)前結(jié)點的key,則繼續(xù)找當(dāng)前結(jié)點的右子結(jié)點;
3.如果要查詢的key等于當(dāng)前結(jié)點的key,則樹中返回當(dāng)前結(jié)點的value。

刪除方法delete實現(xiàn)思想:

1.找到被刪除結(jié)點
2.找到被刪除結(jié)點右子樹中的最小結(jié)點minNode
3.刪除右子樹中的最小結(jié)點
4.讓被刪除結(jié)點的左子樹稱為最小結(jié)點minNode的左子樹,讓被刪除結(jié)點的右子樹稱為最小結(jié)點minNode的右子樹
5.讓被刪除結(jié)點的父節(jié)點指向最小結(jié)點minNode

算法與數(shù)據(jù)結(jié)構(gòu)(五)--二叉樹入門,數(shù)據(jù)結(jié)構(gòu)

?算法與數(shù)據(jù)結(jié)構(gòu)(五)--二叉樹入門,數(shù)據(jù)結(jié)構(gòu)

算法與數(shù)據(jù)結(jié)構(gòu)(五)--二叉樹入門,數(shù)據(jù)結(jié)構(gòu)

五.二叉樹的基礎(chǔ)遍歷

樹的結(jié)構(gòu)和線性表結(jié)構(gòu)不一樣,沒有辦法從頭開始依次向后遍歷,所以存在按照什么樣的搜索路徑進(jìn)行遍歷的問題。

算法與數(shù)據(jù)結(jié)構(gòu)(五)--二叉樹入門,數(shù)據(jù)結(jié)構(gòu)

我們可以把二叉樹的遍歷分為以下三種(簡單說就是按什么時候訪問根節(jié)點進(jìn)而分為前中后):
1.前序遍歷:先訪問根節(jié)點,然后訪問左子樹,最后訪問右子樹。
2.中序遍歷:先訪問左子樹,中間訪問根節(jié)點,最后訪問右子樹。
3.后序遍歷:先訪問左子樹,再訪問右子數(shù),最后訪問根節(jié)點。

可以看到其實就是三種操作變換順序罷了。

算法與數(shù)據(jù)結(jié)構(gòu)(五)--二叉樹入門,數(shù)據(jù)結(jié)構(gòu)

前序遍歷

實現(xiàn)步驟:
1.把當(dāng)前結(jié)點的key放入到隊列中;
2.找到當(dāng)前結(jié)點的左子樹,如果不為空,遞歸遍歷左子樹;
3.找到當(dāng)前結(jié)點的右子樹,如果不為空,遞歸遍歷右子樹。

相關(guān)題目鏈接:

力扣(LeetCode)官網(wǎng) - 全球極客摯愛的技術(shù)成長平臺

中序遍歷

實現(xiàn)步驟:
1.找到當(dāng)前結(jié)點的左子樹,如果不為空,遞歸遍歷左子樹;
2.把當(dāng)前結(jié)點的key放入到隊列中;
3.找到當(dāng)前結(jié)點的右子樹,如果不為空,遞歸遍歷右子樹。

相關(guān)題目鏈接:

力扣(LeetCode)官網(wǎng) - 全球極客摯愛的技術(shù)成長平臺

后序遍歷

實現(xiàn)步驟:
1.找到當(dāng)前結(jié)點的左子樹,如果不為空,遞歸遍歷左子樹;
2.找到當(dāng)前結(jié)點的右子樹,如果不為空,遞歸遍歷右子樹;
3.把當(dāng)前結(jié)點的key放入到隊列中。

相關(guān)題目鏈接:
力扣(LeetCode)官網(wǎng) - 全球極客摯愛的技術(shù)成長平臺

六.二叉樹的層序遍歷

所謂層序遍歷,就是從根節(jié)點(第一層開始),依次向下,獲取每一層所有節(jié)點的值,
有二叉樹如下:
算法與數(shù)據(jù)結(jié)構(gòu)(五)--二叉樹入門,數(shù)據(jù)結(jié)構(gòu)

那么層序遍歷的結(jié)果是:EBGADFHC。

實現(xiàn)步驟:
1.創(chuàng)建隊列,存儲每一層的結(jié)點;
2.使用循環(huán)從隊列中彈出一個結(jié)點;
2.1獲取當(dāng)前結(jié)點的key;
2.2如果當(dāng)前結(jié)點的左子結(jié)點不為空,則把左子結(jié)點放入到隊列中;
2.3如果當(dāng)前結(jié)點的右子結(jié)點不為空,則把右子結(jié)點放入到隊列中。

算法與數(shù)據(jù)結(jié)構(gòu)(五)--二叉樹入門,數(shù)據(jù)結(jié)構(gòu)

題目鏈接:
力扣(LeetCode)官網(wǎng) - 全球極客摯愛的技術(shù)成長平臺

七.二叉樹的最大深度問題

需求:給定一顆樹,計算樹的最大深度(樹的根節(jié)點到最遠(yuǎn)葉子結(jié)點的最長路徑上的結(jié)點數(shù))。

實現(xiàn)步驟:
1.如果根結(jié)點為空,則最大深度為0;
2.計算左子樹的最大深度;
3.計算右子樹的最大深度;
4.當(dāng)前樹的最大深度=左子樹的最大深度和右子樹的最大深度中的較大者+1

題目鏈接:
力扣(LeetCode)官網(wǎng) - 全球極客摯愛的技術(shù)成長平臺

總結(jié)

可以看到關(guān)于樹的很多操作都要用到遞歸。文章來源地址http://www.zghlxwxcb.cn/news/detail-650618.html

到了這里,關(guān)于算法與數(shù)據(jù)結(jié)構(gòu)(五)--二叉樹入門的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹基礎(chǔ)入門

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹基礎(chǔ)入門

    ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???? ?? ?? ?? 個人主頁 :阿然成長日記 ??點擊可跳轉(zhuǎn) ?? 個人專欄: ??數(shù)據(jù)結(jié)構(gòu)與算法??C語言進(jìn)階 ?? 不能則學(xué),不知則問,恥于問人,決無長進(jìn) ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 一棵二叉樹是結(jié)點的

    2024年02月09日
    瀏覽(24)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】—— 二叉樹

    【數(shù)據(jù)結(jié)構(gòu)與算法】—— 二叉樹

    目錄 一、樹 1、初識樹 2、樹的一些概念 3、樹的表示形式 二、二叉樹 1、初識二叉樹 2、兩種特殊的二叉樹 3、二叉樹的性質(zhì)? 4、二叉樹的遍歷 5、實現(xiàn)一棵二叉樹? 6、二叉樹題目(沒代碼的后面會給補上) (1)根節(jié)點沒有前驅(qū)。 (2)子樹的根節(jié)點只有一個前驅(qū),可以有

    2024年04月09日
    瀏覽(23)
  • 數(shù)據(jù)結(jié)構(gòu)與算法-二叉樹

    ????????在計算機科學(xué)中,數(shù)據(jù)結(jié)構(gòu)是組織和存儲數(shù)據(jù)的基礎(chǔ)框架,而算法則是處理這些數(shù)據(jù)的核心邏輯。在這眾多的數(shù)據(jù)結(jié)構(gòu)中,二叉樹因其獨特的層級結(jié)構(gòu)、高效的搜索和插入操作,成為廣泛應(yīng)用的一種非線性數(shù)據(jù)結(jié)構(gòu)。本文將深入探討二叉樹的定義、種類、操作方法

    2024年03月10日
    瀏覽(43)
  • 數(shù)據(jù)結(jié)構(gòu)入門 — 二叉樹的概念、性質(zhì)及結(jié)構(gòu)

    數(shù)據(jù)結(jié)構(gòu)入門 — 二叉樹的概念、性質(zhì)及結(jié)構(gòu)

    本文屬于數(shù)據(jù)結(jié)構(gòu)專欄文章,適合數(shù)據(jù)結(jié)構(gòu)入門者學(xué)習(xí),涵蓋數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)的知識和內(nèi)容體系,文章在介紹數(shù)據(jù)結(jié)構(gòu)時會配合上 動圖演示 ,方便初學(xué)者在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)時理解和學(xué)習(xí),了解數(shù)據(jù)結(jié)構(gòu)系列專欄點擊下方鏈接。 博客主頁:Duck Bro 博客主頁 系列專欄:數(shù)據(jù)結(jié)構(gòu)專欄

    2024年02月07日
    瀏覽(25)
  • 二叉樹(上)——“數(shù)據(jù)結(jié)構(gòu)與算法”

    二叉樹(上)——“數(shù)據(jù)結(jié)構(gòu)與算法”

    各位CSDN的uu們好呀,好久沒有更新我的數(shù)據(jù)結(jié)構(gòu)與算法專欄啦,今天,小雅蘭繼續(xù)來更新二叉樹的內(nèi)容,下面,讓我們進(jìn)入鏈?zhǔn)蕉鏄涞氖澜绨桑。。?二叉樹鏈?zhǔn)浇Y(jié)構(gòu)的實現(xiàn)? 二叉樹鏈?zhǔn)浇Y(jié)構(gòu)的實現(xiàn) 普通的二叉樹的增刪查改是沒有價值的?。?! 只有搜索二叉樹的增刪查改才

    2024年02月15日
    瀏覽(24)
  • 數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹概念及結(jié)構(gòu)(入門)

    數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹概念及結(jié)構(gòu)(入門)

    1.1 樹的概念 樹是一種非線性的數(shù)據(jù)結(jié)構(gòu),它是由n(n=0)個有限結(jié)點組成一個具有層次關(guān)系的集合。把它叫做樹是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。 ☆有一個特殊的結(jié)點,稱為根結(jié)點,根節(jié)點沒有前驅(qū)結(jié)點 ☆除根節(jié)點外,其余結(jié)點被分成M

    2023年04月14日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)】樹與二叉樹(十三):遞歸復(fù)制二叉樹(算法CopyTree)

    【數(shù)據(jù)結(jié)構(gòu)】樹與二叉樹(十三):遞歸復(fù)制二叉樹(算法CopyTree)

    ??二叉樹是一種常見的樹狀數(shù)據(jù)結(jié)構(gòu),它由結(jié)點的有限集合組成。一個二叉樹要么是 空集 ,被稱為 空二叉樹 ,要么由一個根結(jié)點和兩棵不相交的子樹組成,分別稱為 左子樹 和 右子樹 。每個結(jié)點最多有兩個子結(jié)點,分別稱為左子結(jié)點和右子結(jié)點。 引理5.1:二叉樹中層數(shù)

    2024年02月01日
    瀏覽(18)
  • 【數(shù)據(jù)結(jié)構(gòu)入門】-二叉樹的基本概念

    【數(shù)據(jù)結(jié)構(gòu)入門】-二叉樹的基本概念

    個人主頁:平行線也會相交 歡迎 點贊?? 收藏? 留言? 加關(guān)注??本文由 平行線也會相交 原創(chuàng) 收錄于專欄【數(shù)據(jù)結(jié)構(gòu)初階(C實現(xiàn))】 今天的內(nèi)容可是一個大頭,比以往學(xué)的內(nèi)容上了一個檔次。大家對于這塊內(nèi)容一定要好好學(xué),不是很理解的地方一定要及時解決,要不然到

    2023年04月10日
    瀏覽(24)
  • 數(shù)據(jù)結(jié)構(gòu)與算法——樹與二叉樹

    數(shù)據(jù)結(jié)構(gòu)與算法——樹與二叉樹

    ??各位小伙伴久等了,本專欄新文章出爐了?。?! 我又回來啦,接下來的時間里,我會持續(xù)把數(shù)據(jù)結(jié)構(gòu)與算法專欄更新完。 ??樹型結(jié)構(gòu)?? 是一類重要的 ?非線性數(shù)據(jù)結(jié)構(gòu) ,其中以樹和二叉樹最為常用,直觀來看,樹是以分支關(guān)系定義的層次結(jié)構(gòu)。樹型結(jié)構(gòu)在客觀世界中

    2024年02月11日
    瀏覽(16)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】樹與二叉樹

    【數(shù)據(jù)結(jié)構(gòu)與算法】樹與二叉樹

    除了之前我們講的棧、隊列、鏈表等線性結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)中還有著一對多的 非線性結(jié)構(gòu) ——— 樹 。 樹是有 n 個結(jié)點組成的有限集,當(dāng)n=0時為空樹,在任意一顆非空樹中,有且僅有一個 特定的根結(jié)點 ;當(dāng)n1時,其余結(jié)點又可以分為一棵樹,稱為根的 子樹 。 如下圖所示: A為

    2023年04月09日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包