讓程式設計改變世界
change the world by program
世上樹有萬千種,唯有二叉課上講。這裡的二叉是二叉樹,因為二叉樹使用的範圍最廣,最具有代表意義,因此我們重點討論二叉樹。
二叉樹(binary tree)是n(n>=0)個結點的有限集合,該集合或者為空集(空二叉樹),或者由乙個根結點和兩棵互不相交的、分別稱為根結點的左子樹和右子樹的二叉樹組成。
這個定義顯然是遞迴形式的,所以咱看上去有點暈,因為自古有「神使用遞迴,人使用迭代!」
每個結點最多有兩棵子樹,所以二叉樹中不存在度大於2的結點。(注意:不是都需要兩棵子樹,而是最多可以是兩棵,沒有子樹或者有一棵子樹也都是可以的。)
左子樹和右子樹是有順序的,次序不能顛倒。
即使樹中某結點只有一棵子樹,也要區分它是左子樹還是右子樹,下面是完全不同的二叉樹:
空二叉樹
只有乙個根結點
根結點只有左子樹
根結點只有右子樹
根結點既有左子樹又有右子樹
小甲魚為什麼這麼說呢?因為若只從形態上來考慮,擁有三個結點的普通樹只有兩種情況:兩層或者三層。
但對於很二的二叉樹來說,由於要區分左右,所以就演變成五種形態:
因為他很二,所以他也很特殊。小甲魚接下來再介紹一下一些特殊的二叉樹,雖然暫時你可能不能理解它們的用處,但我們有必要先了解一下。
顧名思義,斜樹是一定要斜的,但斜也要斜得有範兒,例如:
坡坡有云:「人有悲歡離合,月有陰晴圓缺,此事古難全。但願人長久,千里共長娟。」意思就是說完美的那是理想,不完美的才是人生。
但是對於二叉樹來說,是否存在完美呢?有滴,那就是滿二叉樹啦。
在一棵二叉樹中,如果所有分支結點都存在左子樹和右子樹,並且所有葉子都在同一層上,這樣的二叉樹稱為滿二叉樹。
不理解?no pic you say a j8….
滿二叉樹的特點有:
葉子只能出現在最下一層。非葉子結點的度一定是2。
在同樣深度的二叉樹中,滿二叉樹的結點個數一定最多,同時葉子也是最多。
資料結構和演算法 二叉樹
二叉樹 樹的每個節點最多只能有兩個子節點。樹的效率 查詢節點的時間取決於這個節點所在的層數,每一層最多有2n 1個節點,總共n層共有2n 1個節點,那麼時間複雜度為o logn 底數為2。二叉搜尋樹要求 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結...
資料結構演算法 二叉樹
二叉樹資料結構 bintree.h include templateclass bintree template class treenode type data treenode lchild 左,右子樹 treenode rchild template class bintree void cr...
資料結構 樹和二叉樹
第一節 二叉樹的定義與基本操作 定義 我們把滿足以下兩個條件的樹型結構叫做二叉樹 binary tree 1 每個結點的度都不大於2 2 每個結點的孩子結點次序不能任意顛倒。由定義得出 二叉樹的每個結點只能含有0 1或2個孩子,且有左右之分。1 二叉樹的五種基本形態 2 二叉樹性質 性質1 二叉樹第...