之前不知道為甚,每次一開啟vs,苦思冥想如何建立二叉樹好,翻開clifford a. shaffer的《資料結構與演算法》發現裡面根本就沒有講如何建立,望著右上角,紅色的小叉叉居然向我招手,我毫不猶豫地對她進行響應……就這樣我這個星期一直沒有進步。直到今天,硬著頭皮,終於coded兩種結構的二叉樹。寫完後發現很容易,一點兒都不難,當然我只是建立和遍歷。下面是分別對兩種結構編寫過程中一些的感受。
1、基於指標的二叉查詢樹
template
class binode
public:
binode(const elem&, binode* pl = null, binode* pr = null);
bool isleaf()
public:
elem m_data;
binode* m_pleft;
binode* m_pright;
其實這樣宣告會導致挺大結構性開銷的,因為葉子節點的左右孩子依然佔據空間,不過既然是第一次寫,也就不管了。
這是建立,因為太久沒有碰c++的模板,然後想試一下,所以就用模板寫了,不過寫的過程中發現自己原來有挺多東西已經忘記了,所以呀熟能生巧,生疏了就忘記。建立的時候我把元素值大的放在右邊,小的放在左邊,相等的就拋棄。寫這個的時候沒有什麼難的,我覺得寫基於陣列的二叉樹比較難。
2、基於陣列的二叉查詢樹
在編寫過程中基本上和基於指標的二叉查詢樹沒什麼區別。不過如果按照演算法分析就挺大區別了,主要在於消除結構性浪費,而且方便查詢,插入刪去。不過建立時我覺得比基於指標的要難,因為要判斷左右孩子是否為空,在陣列中,以我現在的能力只能給她設定乙個特殊值來判斷,除此外就沒有其他方法了,所以我初始化陣列時用-1為空的標誌。如果初始化陣列可以這麼做memset( array, n, size*sizeof(array)), 不過有一點要注意,我當時用arrary = new int[size]來申請空間,然後memset( array ,n , sizeof(array))卻發現只有array[0]是我設定的值,其餘元素都是統一的亂值,所以我在想是否由於sizeof(array)中,array是指標所以得出來的值只是乙個元素的大小呢?而非整個陣列的大小……
當初判斷左右孩子是否為空時我還想了其他兩種方法,不過都被捨棄了,第一種是用乙個值記錄亂值,然後一次作為判斷左右孩子是否為空的標誌,不過因為是隨機值所以不好,out.第二種方法是用一些轉義字元,不過由於我用整型,這會自動轉成整數,所以……
總的來說,今天收穫頗大的
關於二叉樹
1.二叉樹的定義 二叉樹是每個節點最多有兩個子樹的結構。它有5種基本形態 二叉樹可以是空集 根可以有空的左子樹或者右子樹 或者左 右子樹均為空。2.二叉樹的性二叉樹有以下幾個性質 todo 上標和下標 性質1 二叉樹第i層上的節點數最多為 性質2 深度為k的二叉樹至多有 性質3 包含n個節點的二叉樹...
二叉樹 二叉樹
題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...
樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹
目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...