1. 程式人生 > >《資料結構與演算法》---樹

《資料結構與演算法》---樹

一、基本的定義

將整體的資訊分成若干個部分,再將每個部分非誠若干個子部分,這種分類可以用樹形結構來表示。樹是由節點和邊來組成的,節點是可區分的物件,樹的頂端節點稱為樹的根,邊是節點的一個有序對<u,v>,箭頭的尾指向節點u,箭頭的頭指向節點v,所以我們稱u是邊的尾,v是邊的頭。

二、幾種特殊的樹

有序樹:一種特殊的樹,其每個節點的子孫都有一個線性順序。即在一個有序樹中,節點的子孫有一個指定的順序:若一個節點有k個子孫,那麼毫無歧義低指明他的第一個、第二個直到第k^th個子孫。我們處理的大部分樹結構都是有序樹,但是有的時候子孫沒有有序的樹也是合理的模型,我們將他稱為無序樹。

二叉樹:每個節點最多有兩個子節點的有序樹。並且當一個節點有一個子節點時,這個子節點可以被區分為左子節點或者是右子節點。當一個有序樹只有兩個節點時,有兩種不同的二叉樹:一種二叉樹包含根和左子節點,另外一種是包含根和右子節點。沒有節點的二叉樹就是空二叉樹(其實並不是一種樹,因為他違背了樹的節點數比邊數多1的性質)。

三、樹的操作和遍歷

根據以上樹的特性,我們可以知道,一個節點只屬於單個樹,那麼這個節點的子節點和父節點只由該節點本身決定,這種限制給我們在查詢其他節點帶來便利,這樣我們就可以以這個節而不是整個樹作為引數來傳遞了,簡單羅列一些方法:

parent(v):返回節點v的父節點,如果是根節點返回^

children(v):返回節點v的子節點集合,沒有返回^

rightSibling(v):返回v的右兄弟,如果v是根節點或者v是其父節點最右邊的子節點,返回^

firstchild:返回節點v的第一個子節點,如果v是樹葉返回^

...

遍歷分為前序、後序和中序(只與二叉樹有關)遍歷

四、樹的實現

三種基本的特殊型別的儲存表示法:一般二叉樹、一般有序樹和完全二叉樹,不管是什麼型別的樹,在每個節點都有一個info欄位來表示節點的資訊。