說到二叉樹,這可是資料結構裡面的非常重要的一種資料結構,二叉樹是樹的一種,本身具有遞迴性質,所以基於二叉樹的一些演算法很容易用遞迴演算法去實現。作為一種非線性結構,比起線性結構還是相對複雜的,很多人甚至看不懂演算法的意思,不能理解。其實一開始接觸這些東西還是挺暈的,不過你多看幾遍,上機實現可能你就會覺得沒那麼複雜。因為你最後會發現,這些資料結構對於提高程式設計的能力有很大幫助,也是軟體開發中必不可少的。
二叉樹表示方法一般有兩種,第一種一般是順序儲存結構,將二叉樹中的節點資訊存入乙個一維陣列中。
第二種也是比較常用的方法,用鍊錶表示,其節點有值,左子樹指標和右子樹指標,有時候為了演算法方便,也許會有雙親節點指標。其結構一般如下:
//blg樹的鍊錶表示形式
typedef struct blgnode
blgnode,* blgtree;
這裡沒有用到泛型,就用了整型值作為代表。
二叉排序樹也是一種二叉樹,也叫做二叉搜尋樹,是一種動態的搜尋結構,它的左子樹的節點的值小於根節點的值,右子樹節點的值大於根節點的值,左右子樹也分別是一棵二叉排序樹。它的中序遍歷就是值得公升序排序。所以這種樹叫做排序樹。
下面就是相關的實現**,
void initbtree(struct blgnode **bt)
bool emptyblgtree(blgtree bt)
return 0;
}int blgtreedepth(blgtree &bt)
else
else
}}void clearblgtree(blgtree *bt)
return;
}void preorder(blgtree &bt)
return;
}void inorder(blgtree &bt)
return;
}void postorder(blgtree &bt)
return;
}int insertblg(blgtree& bt,int e)
else
else
return 1;
} return 0;
}void createblgtree(blgtree& bt,int* value,int cnt)
return;
}
上面的**經過測試可用,如果還需要什麼地方改進,大家都可以討論。
排序二叉樹or搜尋二叉樹or查詢二叉樹
排序二叉樹,搜尋二叉樹,查詢二叉樹都是乙個意思,只是叫法不同而已。下面的文章中我們統稱為排序二叉樹。本文主要是針對高中資訊學,因此其中不涉及到指標,所有需要用指標的地方都直接使用陣列進行模擬。排序二叉樹定義 1 若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 2 若右子樹不空,則右子...
排序二叉樹or搜尋二叉樹or查詢二叉樹
排序二叉樹,搜尋二叉樹,查詢二叉樹都是乙個意思,只是叫法不同而已。下面的文章中我們統稱為排序二叉樹。本文主要是針對高中資訊學,因此其中不涉及到指標,所有需要用指標的地方都直接使用陣列進行模擬。排序二叉樹定義 1 若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 2 若右子樹不空,則右子...
二叉樹,完全二叉樹,滿二叉樹,二叉排序樹
二叉樹 二叉樹是每個節點最多有兩個子樹的樹結構 是n n 0 個結點的有限集合,它或者是空樹 n 0 或者是由乙個根結點及兩顆互不相交的 分別稱為左子樹和右子樹的二叉樹所組成。完全二叉樹 除最後一層外,每一層上的結點數均達到最大值 在最後一層上只缺少右邊的若干結點 樹中所含的n個節點和滿二叉樹中編號...