1. 程式人生 > 其它 >關於樹(圖論初步)

關於樹(圖論初步)

今天學了關於樹的最最最最基本的有關概念和性質,做一下簡單的記錄:

首先,樹是什麼???

其實簡單點來說,樹就相當於一個元素之間有確定關係的集合。其中每個元素都是一個結點,他們兩兩以特定的方式連線並相互關聯,而樹就是由遞迴定義與實現的。例如,下圖就是一個典型的樹:

 

其中,元素1~9都是結點,而1上面沒有結點與它連線,所以它就是一個特殊的結點——樹根

除了根結點,其他的結點能分成很多個互不相交的有限集合,而其中的幾個互相連線的結點元素就可以組成一棵子樹

每一個結點的子樹的個數,叫做這個結點的度,其實這個結點連線的有幾個子結點它的度就是幾,比如圖中的4,他就有1個子節點,所以它的度就是1,而3下面沒有跟它連線的子結點,所以它的度就是0。

特別的,如果這個結點的度是0,那這個結點就叫做葉節點,如圖中的5,6,3,8,9就都是葉結點。

上面的結點是下面結點的父節點,下面的是上面的子結點,有相同父節點的子結點互為兄弟結點

下面來道題練練手:

要求先輸入兩個數 n、m,表示一棵樹的結點數和邊數,再輸入m行,每行輸入一個父節點 x 和一個x的子結點 y。現在要求輸出樹根,子結點最多的結點 和 此節點的子結點。(資料範圍忽略)

思路其實就是桶的思想,先輸入每個x和y,並記錄y的父節點x。全部輸入完之後再判斷,如果沒有父節點,那這個點就是樹根。最後7用一個迴圈巢狀遍及每一個結點,記錄他子結點的個數,找出最大值就好了。

程式碼如下: