二叉樹是一種經典的資料結構,每個節點最多有兩個子樹,通常被稱為左子樹和右子樹
根節點:樹最上面的節點叫根節點,如下圖中的d為根節點
葉子節點:沒有子節點的節點叫葉子節點,如下圖中的a、c、e、g、j為葉子節點
樹的深度:從根節點開始(深度為0)自上而下逐層累加。下圖中b、h的深度為1,a、c、f、i的深度為2
樹的高度:從葉子節點開始(高度為0)自下而上逐層累加。如下圖中f的高度為1,a的高度為0
二叉樹的遍歷分為,深度優先遍歷和廣度優先遍歷,深度優先遍歷主要就是前序遍歷、中序遍歷、後序遍歷,而層次遍歷屬於廣度優先遍歷,掌握幾種遍歷方法,會加深對資料結構的理解,已下圖為例,根節點為d,介紹幾種遍歷
前序遍歷
按照先左後右的順序訪問,訪問到就輸出,輸出順序:父節點->左子樹->右子樹從根節點出發,首先輸出d
繼續向左訪問,輸出b
繼續向左訪問,輸出a
到達葉子節點a,返回結點b,向右訪問,輸出c
返回b,返回d,輸出h
繼續向左訪問,輸出f
繼續向左訪問,輸出e
到達葉子節點e,返回結點f,向右訪問,輸出g
返回f,返回h,向右訪問,輸出i
繼續向右訪問,輸出j
最終得到dbachfegij
中序遍歷
按照先左後右的順序訪問,當訪問兩次的時候輸出,輸出順序:左子樹->父節點->右子樹從根節點d出發,到達b, a
到達a,a左子樹為空,則返回a,此時a被訪問兩次,輸出a
到達b,b被訪問兩次,輸出b
到達c, c左子樹為空,則返回c,輸出c
到達d,輸出d
到達h、f、e,e左子樹為空返回e,輸出e
到達f,輸出f
到達g,g左子樹為空,則返回g,輸出g
到達f、h,輸出h
到達i、j, j左子樹為空,則返回j,輸出j
到達i,輸出i
最終得到abcdefghji
後序遍歷
按照先左後右的順序訪問,當訪問三次的時候輸出,輸出順序:左子樹 -> 右子樹 ->父節點從根節點d出發,到達b
到達a,a左子樹為空返回a,a右子樹為空,返回a,此時a被訪問三次,輸出a
返回b,第二次訪問b,不輸出b
到達c,c的左子樹和右子樹為空,所以第三次訪問c,輸出c
返回b,b第三次訪問,輸出b
返回d,第二次訪問d, 不輸出d
到達h、f、e,e的左子樹和右子樹為空,所以第三次訪問e,輸出e
返回f, f第二次訪問,不輸出f
到達g,g的左子樹和右子樹為空,所以第三次訪問g,輸出g
返回f,f第三次訪問,輸出f
返回h,第二次訪問h, 不輸出h
到達i,i的左子樹為空,返回i,第二次訪問i, 不輸出i
到達j,j的左子樹和右子樹為空,所以第三次訪問j,輸出j
返回i,i第三次訪問,輸出i
返回h,h第三次訪問,輸出h
返回d,d第三次訪問,輸出d
最終得到acbegfjihd
層序遍歷
按照層次的自上而下遍歷二叉樹最終得到dbhacfieg
二叉樹 二叉查詢樹
構建二叉樹,判斷是否為二叉查詢樹,遞迴先序遍歷,非遞迴中序遍歷 include include include include using namespace std 二叉樹結點 struct treenode 鍊錶結點 struct listnode struct tempnodetempnode...
二叉樹 二叉查詢樹
二叉樹 binary tree 一種樹型結構,每個節點最多擁有兩個節點。如下圖 幾種型別的二叉樹 1.full binary tree 每個節點的孩子數 是 0 或者 2.對高度沒有要求。如下圖 2.perfect binary tree 這個就是最完美的樹,顧名思義,所有葉子節點都有相同的深度,並...
樹(樹,二叉樹,二叉查詢樹)
1.定義 n n 0 個結點構成的有限集合。當n 0時,稱為空樹 2.對於任一棵非空樹 n 0 它具備以下性質 1 樹中有乙個稱為 根 root 的特殊結點,用 r 表示 2 其餘結點可分為m m 0 個互不相交的有限集t1,t2,其中每個集合本身又是一棵樹,稱為原來樹的子樹。3.樹的一些性質 1 ...