二叉樹按層次遍歷 佇列實現

2022-08-02 11:33:09 字數 1086 閱讀 9520

最近資料結構看的還真是噁心額,腦子不好使,演算法寫不來額

·····

二叉樹一大堆概念性的東西,不過還是寫吧。

二叉樹(binary tree)

二叉樹的基本形態

二叉樹也是遞迴定義的,其結點有左右子樹之分,邏輯上二叉樹有五種基本形態:

(1)空二叉樹——(a);  

(2)只有乙個根結點的二叉樹——(b);

(3)只有左子樹——(c);

(4)只有右子樹——(d);

(5)完全二叉樹——(e)

度(degree):節點孩子的數目。

葉子(leaf): 度為0的節點稱為葉子。

深度(depth):樹中最大的層次(從最上0開始數)

滿二叉樹:一棵深度為k且有2^k -1個節點的二叉樹。

完全二叉樹:若設二叉樹的高度為h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第 h 層有葉子節點,並且葉子節點都是從左到右依次排布,這就是完全二叉樹。

性質1:

在二叉樹的第i層上至多有2^(i-1)個節點(i >= 1)

性質2:深度為k的二叉樹至多有2^k - 1個節點

性質3:任意一棵二叉樹t,若其葉子節點數為n0,度為2的節點數為n2,則n0 = n2 + 1

對於完全二叉樹:

性質4:具有n個節點的完全二叉樹的深度是[log2n] + 1

性質5:有n個結點的完全二叉樹各結點如果用順序方式儲存,則結點之間有如下關係:

若i為結點編號則 如果i<>1,則其父結點的編號為i/2;

如果2*i<=n,則其左兒子(即左子樹的根結點)的編號為2*i;若2*i>n,則無左兒子;

如果2*i+1<=n,則其右兒子的結點編號為2*i+1;若2*i+1>n,則無右兒子。

二叉樹按層次遍歷----佇列實現

1.建立二叉樹,輸入#代表null,呼叫遞迴建立二叉樹。

2.構建乙個佇列專門用來儲存二叉樹節點指標,先把根節點入隊,假設是a,對a元素進行訪問,然後對a的左右孩子依次入隊,假設b,c。a出佇列,再是對b進行訪問,同樣將b的左右孩子入佇列,b出對列······重複以上,知道隊列為空。

下面是的**是實現按層次從上到下遍歷二叉樹:

二叉樹層次遍歷(用佇列實現)

核心思想 首先根節點入隊,若佇列非空則做迴圈,若根節點有左右孩子,則左右孩子入隊,第乙個節點出隊,迴圈直到隊列為空。ifndef btree h define btree h typedef char btdatatype typedef struct binarytreenodebtnode vo...

利用佇列實現二叉樹的層次遍歷

利用佇列實現二叉樹的層次遍歷 include define maxsize 100 define nulldata 0 typedef char datatype 二叉鍊錶型別定義 typedef struct binnode binnode,bintree 迴圈佇列型別定義 typedef str...

層次遍歷二叉樹

問題 假定根節點位於第0層 1.層次遍歷二叉樹 每層換行分開 2.層次遍歷二叉樹指定的某層 本文 例如 上圖中1.123 4567 82.第三層 78可以看出得出第二問的解,第一問迎刃而解了,所以從問題二下手 1.層次遍歷二叉樹指定的某層 可以得出這樣的乙個結論 遍歷二叉樹的第k層,相當於遍歷二叉樹...