演算法導論的C實現 畫出d叉樹

2021-09-20 15:34:14 字數 3252 閱讀 2296

前幾天寫了乙個畫出二叉樹的函式:

演算法導論的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...