Java數據結構與算法——樹(基本概念,很重要)

聲明:碼字不易,轉載請註明出處,歡迎文章下方討論交流。
有網友私信我,期待個人下一篇數據結構。很是榮幸文章被承認,也很是感謝大家的監督。
前言:Java數據結構與算法專題會不定時更新,歡迎各位讀者監督。本文介紹數據結構裏一些複雜的數據結構——樹(Tree),相應的會補充一些算法。本篇主要介紹一些必知必會的,多是考試中的,也多是面試中的。

0、樹體系索引(待更)

二叉樹及操做java

二叉樹的查找算法
B樹、B+樹
Huffman(哈夫曼)樹和Huffman編碼
堆(Heap)和堆排序
紅黑樹
人生苦短,學會淡定。。。

一、樹的定義及存儲結構

1.1 樹的定義

樹是一種非線性的數據結構,它是由n(n>=1)個有限節點組成的一種具備層次關係的集合,之因此稱之爲樹,是由於它長得像一顆倒過來的樹。
舉個例子,每一個人都有家族樹,家族樹通常長這樣:
圖片描述
家族樹的樣子看起來像一顆正常的樹,而數據結構中的樹則像是一顆倒過來的樹:
圖片描述
能夠看出,一棵樹有多個節點,上圖中帶〇的字母就是一個節點。每一個節點可能有0個或更多子節點,每一個節點至多有一個父節點,沒有父節點的那個稱之爲根節點。除根節點外,每一個節點又能夠分爲多個不相交的子樹。node

1.2 樹的相關概念術語

1)節點<node>
樹中每一個元素都叫節點
2)根節點或樹根<root>
樹頂端的節點稱之爲根節點,也叫樹根
3)子樹<subTree>
除根節點以外,其餘節點能夠分爲多個樹的集合,叫作子樹,在上圖中,K這個節點能夠稱之爲一顆子樹,而H、K、L三個節點組合起來也能夠叫作一顆子樹
4)節點的度
一個節點直接含有的子樹的個數,稱之爲節點的度。好比上圖中B節點的度爲3,C節點的度是2,I、J、K、L節點的度是0
5)葉子節點、葉節點、終端節點
度爲0的節點叫作葉子節點,也叫葉節點、終端節點,其實就是沒有子節點的節點,或者說沒有子樹的節點
6)雙親節點、父節點
父節點就是一個節點上頭的那個節點,若是一個節點包含若干子節點,那麼這個節點就是這些子節點的父節點,也叫雙親節點
7)兄弟節點
擁有相同父節點的節點互稱爲兄弟節點
8)樹的度
一棵樹中最大節點的度稱之爲樹的度,即樹中哪一個節點的子節點最多,那麼這個節點的度也就是樹的度
9)節點的層次
從根這一層開始,根算1層,根的子節點算2層,一直到最下面一層
10)樹的高度、深度
樹的深度是從根節點開始、自頂向下逐層累加(根節點的高度是1)助記:深度從上到下
樹的高度是從葉節點開始、自底向上逐層累加(葉節點的高度是1)助記:高度由下向上
雖然樹的高度和深度同樣,可是具體到某個節點上,其高度和深度一般是不同的。
11)堂兄弟節點
堂兄弟節點是同一層,父節點不一樣,或者說雙親節點在同一層的節點稱之爲堂兄弟節點
12)節點的祖先
從根節點到某一節點一路順下來的除了該節點的全部節點都是該節點的祖先節點
13)節點的子孫
以某節點爲根的子樹中,任何一個節點都是其子孫,也就是說這個節點下面與這個節點有關的節點都是這個節點的子孫
14)森林
由m棵不相交的樹組成的集合,叫作森林

1.3 都有哪些樹

樹的種類有不少,咱們接觸到的樹有二叉樹、平衡二叉樹、二叉查找樹、B樹、B+樹、哈夫曼樹、B*樹、紅黑樹和trie樹等。面試

二、樹的存儲結構及實現

樹,首先首先是由節點組成,而除根節點的每一個節點必定只有一個父節點,因此能夠利用每一個節點只有一個父節點的特性,使用父節點來構造樹。算法

public class TreeNode1{
    private int data;
    private int parent;
    
    public int getData(){
        return date;
    }
    public void setData(int data){
        this.data = data;
    }
    
    public int getParent(){
        return parent;
    }
    public void setParent(int parent){
        this.parent = parent;
    }
}

這個節點有兩個屬性,一個是data,也就是這個節點的值(這個是必須有的),另外一個是parent,也就是節點的父節點。segmentfault

下一篇更新二叉樹,敬請期待
碼字不易,如對您有幫助,歡迎點贊收藏打賞^_^數據結構

相關文章
相關標籤/搜索