C言語で木の高さ,内部道長,外部道長を求めるプログラムを考えています.
高さを再帰関数を用いて求めようとしたのですが,関数を呼ぶ際に何を引数にすればいいのかわからなくなってしまいました.
一つ目のコードの一番下にある,STheightで木の高さを求めています.
二つ目のコードの下でheightを宣言してここに返り値を入れたいのですが,今のままでコンパイルすると
implicit declaration of function 'STheight'
となってしまいます.
どのようにすれば解決しますでしょうか.
C
1#include <stdlib.h> 2#include<stdio.h> 3#include<time.h> 4#include "Item.h" 5//clock_t start,end; 6typedef struct STnode* link; 7struct STnode { Item item; link l, r; int N; }; 8static link head, z; 9link NEW(Item item, link l, link r, int N) 10{ link x = malloc(sizeof *x); 11 x->item = item; x->l = l; x->r = r; x->N = N; 12 return x; 13} 14void STinit(){ 15 //start=clock(); 16 head = (z = NEW(NULLitem, 0, 0, 0)); 17} 18int STcount(void) { return head->N; } 19Item searchR(link h, Key v) 20{ Key t = key(h->item); 21 if (h == z) return NULLitem; 22 if eq(v, t) return h->item; 23 if less(v, t) return searchR(h->l, v); 24 else return searchR(h->r, v); 25} 26Item STsearch(Key v) { return searchR(head, v); } 27link insertR(link h, Item item) 28{ Key v = key(item), t = key(h->item); 29 if (h == z) return NEW(item, z, z, 1); 30 if less(v, t) 31 h->l = insertR(h->l, item); 32 else h->r = insertR(h->r, item); 33 (h->N)++; return h; 34} 35void STinsert(Item item) 36{ head = insertR(head, item); } 37void sortR(link h, void (*visit)(Item)) 38{ 39 if (h == z) return; 40 sortR(h->l, visit); 41 visit(h->item); 42 sortR(h->r, visit); 43} 44void STsort(void (*visit)(Item)) 45{ //end=clock(); 46 //printf("%fsec\n",(double)(end-start)/CLOCKS_PER_SEC); 47 sortR(head, visit); 48} 49 50int Max(int x,int y){ 51 if(x < y) return y; 52 else return x; 53} 54 55int STheight(link h){ 56 if(h == NULL) return 0; 57 else return 1 + Max(STheight(h->l),STheight(h->r)); 58} 59
C
1#include <stdio.h> 2#include <stdlib.h> 3#include "Item.h" 4#include "ST.h" 5 6int main(int argc, char *argv[]) 7{ int N, M, maxN = atoi(argv[1]), sw = atoi(argv[2]); 8 Key v; Item item; 9 STinit(maxN); srand(1); 10 for (M = 0, N = 0; N < maxN; N++) 11 { 12 if (sw == 1) v = ITEMrand(); 13 else if (sw == 2) v = N+1; 14 else if (ITEMscan(&v) == EOF) break; 15 item = STsearch(v); if (item.key != NULLitem.key) continue; 16 key(item) = v; 17 STinsert(item); M++; 18 } 19 STsort(ITEMshow); 20 printf("\n"); 21 printf("%d keys ", N); 22 printf("%d distinct keys\n", STcount()); 23 24 int height = STheight(item); 25 printf("height:%d\n",height); 26 27 return 0; 28} 29
回答2件
あなたの回答
tips
プレビュー