前幾天寫了乙個畫出二叉樹的函式:
演算法導論的c實現——畫出二叉樹。
章後有一道題是有關d叉樹的,記得後面幾章也會有用到d叉樹的地方,就把畫二叉樹的函式稍改了下,現在可以畫出d叉樹。
d叉樹空格的計算原理和二叉樹很相近,比如現在有一棵高度為
h ei
gh
theight
height
的d叉樹。當
n
nn從樹根向樹葉遞增時,可以算出第
n
nn行兩個節點之間的空格的數目: n=h
eigh
t−1,
inte
rval
=d0∗
base
+(d0
−1)∗
el
en=height-1,interval = d^0*base+(d^0-1)*ele
n=heig
ht−1
,int
erva
l=d0
∗bas
e+(d
0−1)
∗ele
n =h
eigh
t−2,
inte
rval
=d1∗
base
+(d1
−1)∗
el
en=height-2,interval = d^1*base+(d^1-1)*ele
n=heig
ht−2
,int
erva
l=d1
∗bas
e+(d
1−1)
∗ele
n =h
eigh
t−1,
inte
rval
=d2∗
base
+(d2
−1)∗
el
en=height-1,interval = d^2*base+(d^2-1)*ele
n=heig
ht−1
,int
erva
l=d2
∗bas
e+(d
2−1)
∗ele
… ………
……可以得到每一行兩元素間的空格數: int
erva
l=dh
eigh
t−n−
1∗ba
se+(
dhei
ght−
n−1−
1)∗e
le
interval=d^*base+(d^-1)*ele
interv
al=d
heig
ht−n
−1∗b
ase+
(dhe
ight
−n−1
−1)∗
elecode
如下:
//draw a d fork tree
//agrs: a:需要畫樹的陣列
// size:陣列的長度
// dfork:d叉樹的寬度
void
drawdtree
(int a,
int size,
int dfork)
else
//畫此行第乙個元素前面的空格
for(
int iblank=
0; iblank)//輸出此行第乙個元素
printf
("%d"
, a[subscript]);
subscript++
;//畫接下來的空格組+元素
for(
int icouple=
0; icouple1;icouple++
)printf
("%d"
, a[subscript]);
subscript++;}
}//換行
printf
("\n");
}}
#define lgd(d,x) static_cast(ceil(log((d-1)*x+1)/log(d)))
#define dforkbaseinterval 7
#define dforkelementinterval 1
void
testdforktree()
;void
drawdtree
(int a,
int size,
int dfork)
;
測試函式如下所示:
//testdforktree
void
testdforktree()
; heap a =
;drawdtree
(a.array, a.array_size, dfork)
;}
當改變dfork
的值的時候,畫出來的d叉樹如下所示:
draw 2 fork tree
the height of this tree is: 4
151 9
5 2 8 7
4 6 6 5 3
draw 3 fork tree
the height of this tree is: 3
151 9 5
2 8 7 4 6 6 5 3
draw 4 fork tree
the height of this tree is: 3
151 9 5 2
8 7 4 6 6 5 3
演算法導論 c 實現二叉搜尋樹
求二叉搜尋樹最小結點 treenode p tree minimum treenode p tree tree minimum tree left 求二叉搜尋樹最大結點 求二叉搜尋樹後繼結點 treenode p tree successor treenode p tree treenode p y...
演算法導論 6 2 d叉堆
問題 d叉堆性質與二叉堆相似,但其每個非葉子結點有d個孩子 1 如何在乙個陣列中表示乙個d叉堆?2 包含n個元素的d叉堆的高度是多少?3 給出 extract max在d叉堆的有效實現,並用d與n表示其時間複雜度.4 給出insert在d叉堆的有效實現,並用d與n表示其時間複雜度.5 給出incre...
演算法導論紅黑樹的C 實現
按照演算法導論裡的紅黑樹偽 用c 實現了一下,並附帶一些測試 include include using namespace std enum color 顏色標記 templateclass binary tree node 紅黑樹節點 binary tree node parent 父節點 bi...