我是一顆樹,之前我們資料結構家族中的乙個小朋友——「棧」 已經給你們介紹過的我們這個家族了(我是乙個「棧」)。之所以叫棧為小朋友,是因為我和他的爸爸——陣列是平輩的。
之所以存在我們這樣乙個家庭,最主要的原因是陣列他們家庭雖然很強大,但是有一定的侷限性。大家都知道,無論是陣列、鍊錶以及他們家的那幾個小娃娃(棧、佇列)等,儲存的資料之間都只有簡單的前後順序關係。
既然說到這了,那就在給你們科普一下整個資料結構大家族吧。畢竟你們認識的那個「棧」只是個小晚輩,對我們家族的歷史什麼的都不是很了解。
資料結構,主要有兩個作用,第乙個是儲存資料,第二個是可以反應所儲存的資料之間的邏輯關係,注意,邏輯關係並不是他們在計算機中儲存的物理位置關係哦。所以,根據大家儲存的資料的邏輯結構的不同,主要可以分為這個幾個大的分支:
大家了解的陣列、佇列、棧、鍊錶他們都屬於線性結構的分支的。今天的主角,也就是我和我的「樹」家族是樹形結構這個大的分支中的。
也許你已經猜到了,我是整個資料結構大家族的樹形結構這一分支的族長。作為乙個龐大的家族分支,我們當然具備整個資料結構家族的基本功能——資料儲存。另外,整個樹形分支主要用來儲存具有樹形結構的資料集合。說的白一點,就是我們幫別人儲存的資料是有層次關係的。就像自然界中的一顆倒置的樹一樣。
先來說下找我們儲存資料的一些限制和要求吧。我們幫別人儲存的每個元素我們稱之為節點,而我們一般有乙個特定的結點被稱為根節點,其餘的結點都叫非根節點。下面給你看一顆標準的樹,然後通過這張圖,再來介紹下什麼是葉節點、父節點等概念。
h節點是o和l的父節點,o和l是h節點的子節點。 h節點是根節點,因為他沒有父節點。 i、s和l節點是葉結點,因為他們沒有子節點。 i和s是兄弟節點,因為他們的父節點都是o節點。
先來說說這個我十分寵愛的小兒子——無序樹。
無序樹,他也是個樹形結構,除了樹中的父子節點之間有關係以外,同乙個父節點的所有子節點之間是沒關係的,在樹中,這種關係就是順序,比如誰在前誰在後。所以,他叫無序樹。另外,我的這個小兒子由於太過自由,至今都沒給我生出個娃娃來。所以,我的小兒子是個孤家寡人。
再來詳細說說他的資料儲存方面的事情,前面說了,他儲存的資料之間只有父子節點間有關係。如果你讓他幫你儲存a、b、c三個資料的話,1個父節點,2個子結點的情況有 3 種。
無論兩個子節點位置關係如何,都是同一棵樹。即a-b-c和a-c-b被認為是同一棵樹。
再來介紹一下我的大兒子,整個樹家的順位繼承人。他真的做到了乙個長子應該做的所有事情,他和他的孩子們幾乎包攬了樹家族的所有工作內容。
他和無序樹的區別比較明顯,就是在有序數中,子節點之間是有順序關係的。如果你讓我的大兒子幫你儲存a、b、c三個資料的話,1個父節點,2個子結點的情況有 6 種。
只要兩個節點的順序掉換一下,又是乙個新的樹。a-b-c和a-c-b被認為是兩棵不同的樹。
從上面的家族圖譜中可以發現,我的大兒子有序樹也有很多孩子的。其中我比較出名的三個孫子分別是二叉樹、霍夫曼樹和b樹等。
現在的年輕人,都很有個性的,幫別人儲存資料的時候都有很多要求呢,不過也好,年輕人嘛,就應該有點性格。也得益於他們的各自的特性,樹家族才能如此強大。
關於有序樹的幾個晚輩的介紹,後面讓他們自己來吧,我這把老骨頭說了這麼多也累了。
為什麼是一棵樹?
一棵樹的綠色情懷 少砍一棵樹,守護一片綠。一棵樹的生態價值 印度加爾各答農業大學德斯教授對一棵樹的生態價值進行了計算 一棵50年樹齡的樹,以累計計算,產生氧氣的價值約31200美元 吸收有毒氣體 防止大氣汙染價值約62500美元 增加土壤肥力價值約31200美元 涵養水源價值37500美元 為鳥類及...
判斷一棵樹是否是另一棵樹的子樹 java實現
這是乙個很經典的演算法題,聽起來好像挺難的,但是其實很簡單。我覺得我們接觸到的問題,並沒有難題,只有複雜不複雜。乙個再難的問題,也可以分解成乙個個簡單的問題,再將這些簡單的問題交給不同的人去做就構成了乙個專案。其實寫演算法也是這個思想。首先要判斷一棵樹是不是另一棵樹的子樹,我們只需遍歷一棵樹,用這個...
刷演算法 一棵樹是否是另一棵樹的子結構
輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 假設樹a的根節點ra和樹b的根節點rb值相同,那麼接下來就以這兩個節點開始依次比較ra.left和rb.left ra.right和rb.right,過程中只要有乙個不相同則返回 繼續比較ra.left和rb是否...