樹的基本概念
節點:節點包括乙個資料元素及若干指向其他子樹的分支。
節點的度:節點所擁有子樹的個數稱為節點的度。
葉節點:度為0的節點成為葉結點,葉結點也稱為終端節點。
分支節點:度不為0的節點稱為分支節點,分支節點又稱非終端節點。一棵樹中排除葉結點外的所有節點都是分支節點。
祖先節點:從根節點到該節點所經分支上的所有節點。
子孫節點:以某節點為根節點的子樹中所有節點
雙親節點:樹中某節點有孩子節點,則這個節點稱為它孩子節點的雙親節點,雙親節點也成為前驅節點。
孩子節點:樹中乙個節點的子樹的根節點稱為該節點的孩子節點,孩子節點也稱為後繼節點。
兄弟節點:具有相同雙親節點的節點稱為兄弟節點。
樹的度:樹中所有節點的度的最大值成為該樹的度。
節點的層次:從根節點到樹中某節點所經路徑上的分支也稱為該節點的層次,根節點的層次為1,其他節點層次是雙親節點層次加1.
樹的深度:樹中所有節點的層次的最大值稱為該樹的深度。
樹的儲存結構
雙親表示法,孩子表示法,雙親孩子表示法,孩子兄弟表示法。
雙親表示法:用指標表示出每個節點的雙親節點
typedef int datatype;
struct node;
優點:尋找乙個節點得雙親節點操作實現很方便
缺點:尋找乙個節點的孩子節點很不方便。
孩子表示法: 用指標指出每個節點的孩子節點
typedef int datatype;
struct node;
優點:尋找乙個節點的孩子節點比較方便。
缺點:尋找乙個節點得雙親節點很不方便。
雙親孩子表示法:用指標既表示出每個節點得雙親節點,也表示出每個節點的孩子節點。即雙親表示法+孩子表示法。
typedef int datatype;
struct node;
優點:找某個節點的雙親節點和孩子節點非常方便
孩子兄弟表示法:即表示出每個節點的第乙個孩子節點,也表示出每個節點的下乙個兄弟節點。
typedef int datatype;
struct node;
二叉樹
一棵二叉樹是節點的乙個有限集合,該集合或者為空,或者是由乙個根節點加上兩顆分別稱為左子樹和右子樹的二叉樹組成。每棵子樹的根節點有且只有乙個前驅,可以由0個或多個後繼。因此,樹是遞迴定義的。
每個節點最多有兩棵子樹,即二叉樹不存在度大於2的節點。二叉樹的子樹有左右之分,其子樹的次序不能顛倒。
滿二叉樹:在一棵二叉樹中,如果所有分支節點都存在左子樹和右子樹,而且所有葉子節點都在同一層上。
完全二叉樹:如果一棵具有n個節點的二叉樹的結構與滿二叉樹的前n個節點的結構相同,稱為完全二叉樹。滿二叉樹是特殊的完全二叉樹。
樹的儲存結構
順序儲存結構:對於一棵完全二叉樹所有節點按照層序自頂向下,同一層自左向右順序編號,就得到乙個節點的順序序列。
優點:儲存完全二叉樹,簡單省空間
缺點:儲存一般二叉樹尤其單支樹,儲存空間利用不高。
鏈式儲存:
struct bintreenode;
或者還加乙個指向雙親節點的指標
struct bintreenode;
二叉樹的基本操作
二叉樹的遍歷:遵循某種次序,遍歷二叉樹中的所有節點,使得每個節點被訪問一次,而且僅訪問一次。「訪問」:即對節點施行某些操作。
先序遍歷:先訪問根節點,再訪問左子樹,最後訪問右子樹。
中序遍歷:先訪問左子樹,再訪問根節點,最後訪問右子樹。
後序遍歷:先訪問左子樹,再訪問右子樹,最後訪問根節點。
層序遍歷:同一層中按左子樹再右子樹的次序遍歷,從根節點層到葉節點層訪問。
樹的拷貝
首先,拷貝分兩種:淺拷貝和深拷貝
淺拷貝:兩個物件同時指向同一塊記憶體,修改乙個,另乙個也會被修改。
深拷貝:原有所有物件,包括記憶體複製乙份。
fork中的拷貝是特殊的拷貝,剛開始時淺拷貝,這樣減少了空間浪費。要修改時的一瞬間,再深拷貝。而樹的拷貝為深拷貝。
二叉樹 滿二叉樹與完全二叉樹
二叉樹 binary tree 是n n 0 個元素的有限集合,該集合為空或者為由乙個稱為 根 的元素及兩個不相交的 被分別稱為左子樹和右子樹的二叉樹組成 二叉樹的基本特點 每個結點最多有兩棵子樹 左子樹和右子樹是有順序的,且不可顛倒 圖一1 結點 二叉樹中的每乙個元素都稱為結點。通常二叉樹的許多名...
樹與二叉樹
樹是一類重要的非線性資料結構,是以分支關係定義的層次結構 定義 樹 tree 是n n 0 個結點的有限集t,其中 n 0時為空樹 n 0時,有且僅有乙個特定的結點,稱為樹的根 root 當n 1時,其餘結點可分為m m 0 個互不相交的有限集t1,t2,tm,其中每乙個集合本身又是一棵樹,稱為根的...
樹與二叉樹
建立 先序二叉樹,中序二叉樹,後序二叉樹。給定兩種遍歷序列 前序中序或後序中序 重塑二叉樹 遍歷 判斷乙個節點是否存在於二叉樹中 二叉樹的遍歷 先序,中序,後序 遞迴 非遞迴 層次遍歷 從上到下或從下到上列印 zigzag遍歷方式層次遍歷 二叉樹性質 二叉樹中葉子節點的個數 二叉樹第k層節點數目 二...