/*順序儲存結構型別定義*/
#define virnode '0'
/*定義虛節點值*/
#define max_tree_size 100
/*定義儲存空間最大值*/
typedef
char elemtype;
/*定義節點值型別*/
typedef elemtype sqbittree[max_tree_size]
;/*sqbittree[0]存放結點總數,即構成滿二叉樹時節點個數*/
/*層次遍歷演算法*/
void
leveltree
(sqbittree bt)
/*按滿二叉樹遍歷輸出*/
printf("\n");
i = 2 * i; /*跳到下一層第乙個結點*/
}}
/*層次建立演算法*/
void
crebittree
(sqbittree bt,
int n)
/*n是真實結點個數*/
i =2* i;
} bt[0]
= i -1;
/*0號單元存放結點總數*/
}
/*交換二叉樹所有節點的左右子樹演算法*/
void
exchangetree
(sqbittree bt)
k =2* k;
/*交換下一層結點*/
}}
/*統計葉子結點個數演算法*/
intcountleaf
(sqbittree bt)
for(j = i; j <
2* i; j++)}
}
/*求二叉樹高度演算法*/
inthigh
(sqbittree bt)
return h;
}
/*統計度為2結點個數*/
intcount2
(sqbittree bt)
return n;
}}
/*統計度為1結點*/
intcount1
(sqbittree bt)
i =2* i;
}}
/*找出值為x的結點的雙親結點和左右孩子結點值演算法*/
intsearch
(sqbittree bt, elemtype x, elemtype* pa, elemtype* lc, elemtype* rc)
if(i ==1)
else
*pa = bt[i /2]
;if(i > bt[0]
/2|| bt[
2* i]
== virnode)
/*無左孩子*/
else
*lc = bt[
2* i];if
(i > bt[0]
/2|| bt[
2* i +1]
== virnode)
/*無右孩子*/
else
*rc = bt[
2* i +1]
;return1;
}
順序儲存二叉樹
從資料儲存來看,陣列儲存方式和樹的儲存方式可以相互轉換,即陣列可以轉換成樹,樹也可以轉換成陣列,看下面的示意圖。順序二叉樹通常只考慮完全二叉樹 第n個元素的左子節點為 2 n 1 第n個元素的右子節點為 2 n 2 第 n 個元素的父節點為 n 1 2 n 表示二叉樹中的第幾個元素 按 0 開始編號...
順序儲存二叉樹
從資料儲存來看,陣列儲存方式和樹的儲存方式可以相互轉換,即陣列可以轉換成樹,樹也可以轉換成陣列。陣列轉換成樹即是將陣列中的各個元素按照二叉樹的層次儲存起來的過程。原陣列 1,2,3,4,5,6,7 轉換為順序二叉樹如下圖所示 順序儲存二叉樹的特點 通常只考慮完全二叉樹 第n個元素的左子節點為2 n ...
順序儲存二叉樹
package com.datastructure.tree.binarytree 順序儲存二叉樹 1。順序儲存二叉樹通常只考慮完全二叉樹 2。第n個元素的左子節點為2 n 1 3。第n個元素的右子節點為2 n 2 4。第n個元素的父親節點為 n 1 2 public class sequentia...