植樹節,種個二叉樹吧?

2021-10-21 20:11:48 字數 2388 閱讀 9783

植樹節,種個二叉樹吧?

3 月 12 號,是全國的重大節日:植樹節,記得小時候就跟隨老師一起植過樹。現在參加工作了,雖然沒有植過樹,但是學到過很多樹的結構,比如二叉樹、b+ 樹,紅黑樹。每次面試必問,恰逢植樹節,這裡給大家做個二叉樹的總結,也方便自己複習。

比如現在有個陣列,存放了很多使用者的名字,需要從這個陣列中找到包含指定的使用者名稱,最快的方式是什麼?

我們會想到二分查詢,雖然這種方式很快,但要達到最快還需要有個條件:陣列有序。

如果我們能把插入使用者名稱的時候直接給他排序,那最後的結構就是有序結構。

因此有人設計了一種資料結構:二叉查詢樹,也叫做二叉樹。

如下圖所示:這是一種二叉樹結構。

根據上文中的例子的,假定 herry 在最上面,下面有 alice,mike,ivy,tom,從左到右,從上到下來看的話,最後的排序是:

alice->herry->ivy->mike->tom,確實是按照字母順序排的。

其中有四個術語需要說明:節點、左節點、右節點、根節點。

其中每個紅色圓球都算乙個節點,節點左下邊相連線的節點叫做左節點,而右邊相連的叫做右節點。比如 alice 被稱作 herry 節點的左節點,mike 被稱作 herry 的右節點。而根節點只會有乙個,屬於最上面的節點,上圖中的 herry 就是根節點。

對於其中每個節點,左子節點的值都比它小,而右子節點的值都比它大。比如 alice < herry < mike。

假設現在我們想要查詢 ivy,首先檢查根節點,發現比 herry 大,所以往下繼續找,找到了根節點的右節點 mike,再繼續找,比 mike 小,所以找 mike 的左節點,正好找到 ivy。

但是二叉樹也有缺點:

那有沒有平衡的二叉樹呢?當然有,那就是紅黑樹,限於篇幅和側重點,這個放到下篇再講吧

大白話說二叉樹就是每個節點只能有兩顆子樹,且有左右之分。

來看看專業定義:二叉樹是 n(n>=0 ) 個結點的有限集合,該集合或者為空集(稱為空二叉樹),或者由乙個根結點和兩棵互不相交的、分別稱為根結點的左子樹和右子樹組成。

定義:節點擁有的子樹數目稱為節點的

我們來看下圖就一目樂然了。

比如節點 b 的度為 2,節點 e 的度 為 1.

而樹的度就是所有節點的度的最大值,也就是 2。

如下圖所示:根節點為第一層,依次類推。

二叉樹的遍歷:從二叉樹的根節點出發,按照某種次序依次訪問二叉樹中的所有節點,使得每個節點都能被訪問一次,且僅被訪問一次。

二叉樹的訪問次序可以分為四種:

前序遍歷:通俗的說就是從二叉樹的根結點出發,當第一次到達結點時就輸出結點資料,按照先向左在向右的方向訪問。

中序遍歷:就是從二叉樹的根結點出發,當第二次到達結點時就輸出結點資料,按照先向左再向右的方向訪問。

後序遍歷:就是從二叉樹的根結點出發,當第三次到達結點時就輸出結點資料,按照先向左再向右的方向訪問。

層次遍歷:就是按照樹的層次自上而下的遍歷二叉樹。

按照前序遍歷的結果就是 badce。

按照中序遍歷的結果就是 abcde。

按照後續遍歷的結果就是 acedb。

按照層次遍歷的結果就是 badce。

巨人的肩膀:

《演算法**》

c map 平衡樹 植樹節,程式猿種的那些樹

公曆 3 月 12 日是一年一度的植樹節。旨在宣傳保護森林,並動員群眾參加植樹造林活動。說到樹,程式猿們肯定不陌生,趁著這個植樹節到來之時普及一下程式猿們經常遇見的樹。定義二叉搜尋樹又稱二叉查詢樹,亦稱為二叉排序樹。設 x 為二叉查詢樹中的乙個節點,x 節點包含關鍵字 key,節點x 的 key 值...

列印二叉樹節點

從上往下列印出二叉樹的每個節點,同層節點從左至右列印。條件反射地想通過遞迴解決,結果硬是沒有找到合適的解決思路,也許遞迴的方式不是很適合這種型別的題目吧 利用佇列的先進先出 fifo 特性解決。每從佇列頭部獲取乙個節點,就將該節點的左右子節點存入佇列的尾部。如此往復,直至隊列為空。這篇部落格內的和 ...

二叉樹 節點分析

通過問題了解 問題一 某二叉樹中度為2的結點有18個,則該二叉樹中有 性質1 二叉樹的終端結點 葉子結點 數等於雙分支結點數加1.假設二叉樹中終端結點數為n0,單分支結點數為n1,雙分支結點數為n2,二叉樹中總結點數為n,因為二叉樹中所有結點度數均小於或等於2,所以有 n n0 n1 n2 另一方面...