數據結構學習:什麼是樹?

概念

A tree is a nonlinear data structure, compared to arrays, linked lists, stacks and queues which are linear data structures. A tree can be empty with no nodes or a tree is a structure consisting of one node called the root and zero or one or more subtrees.

樹是一個非線性的數據結構,相比較而言,數組,鏈表,棧和隊列等等就是線性的數據結構。樹可以爲空,不包含任何節點,或者樹可以稱爲由一個根節點和零個或者多個子樹構成的。

判斷是否是一顆樹的條件:

  • 有且只有一個根節點;
  • 有若干個互不相交的子樹;
  • 根節點(root)沒有父節點;
  • 一個節點有且只有一個父節點(根節點除外);
  • 節點可以有多個子節點;
    在這裏插入圖片描述

和樹相關的一些術語,查閱了網上的一些資料,做了一下整理;

Terminology(術語) Explaining(解釋)
Root(根) 樹中的頂級節點
Child(子節點) Root的每一個子樹的叫做Root的子節點(Child)
Parent(父節點) Root是每一個子樹的的父節點(Parent)
Siblings(兄弟節點) 一些具有相同父節點的節點稱爲兄弟節點
Descendant(後代) 對任意節點x,從根節點到節點x的所有節點都是x的祖先
Ancestor(祖先) 對任意節點x,從節點x到葉子節點的所有節點都是x的後代
Leaf(葉子節點) 沒有子節點的節點
Degree(度) 子節點的個數(最大子節點的度稱爲樹的度)
Edge(邊) 父節點和子節點相連的一個路徑
Depth(深度) 節點的深度定義爲:當前節點和根之間的邊數。
Height of node(節點的高) 節點的高度是該節點與後代節點之間最長路徑上的邊數,所以葉子節點高度爲0
Height of tree(樹的高) 樹的高度是其根節點的高度
Forest (森林) 多顆互不相交的樹組成的集合

樹的分類

按照個人的理解進行分類;

  • 一般樹:任意一個節點的子節點的個數都不受限制;
  • 二叉樹:任意一個節點的子節點的個數最多隻有兩個;
    • 一般二叉樹
    • 滿二叉樹:在不增加樹的層數的前提下,無法再多添加一個節點的二叉樹
    • 完全二叉樹:如果只是刪除了滿二叉樹的最底層最右邊的連續若干個節點,則這樣形成的二叉樹叫完全二叉樹;
  • 森林:n個互不相交的樹的集合;

樹的數據結構

typedef struct TreeNode *PtreNode; //前向聲明

struct TreeNode {
    ElementType element;
    PtreNode	FirstChild;
    PtreNode	NextSibling;
}

總結

大部分的知識點主要參考了wiki上的解釋,這裏對於二叉樹的分類都是點到即止,其實需要自己結合實踐寫代碼實現一下,深入瞭解知識點和應用場景,以加深理解,如有錯誤的地方,希望指正。

參考

Tree_(data_structure)
樹的遍歷

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章