挿入した木の深さを返す関数

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
MEA
記事: 12
登録日時: 5年前

挿入した木の深さを返す関数

#1

投稿記事 by MEA » 5年前

insert関数で挿入した数が木のどの深さにあるかを返すプログラムを書きたいのですが、返ってくる値が全て0になってしまいます。以下のコードのどこを改善したら良いでしょうか?

コード:

#include<stdio.h>
#include<stdlib.h>
struct vertex {
    int data;
    struct vertex *l, *r;
};

struct vertex *newv()
{
  return((struct vertex *)malloc(sizeof(struct vertex)));
}

struct vertex *create()
{
    struct vertex *p;

    p=newv();
	  p->data=0;
    p->r=NULL;
  	p->l=NULL;
    return(p);
}

int insert(struct vertex *p,int x,int lev)
{
struct vertex *pt;
lev=0;

if (p->data>x && p->l!=NULL)
   return(insert(p->l,x,lev=lev+1));
if (p->data<x && p->r!=NULL)
   return(insert(p->r,x,lev=lev+1));
   pt=newv();
   pt->data=x;
   pt->l=pt->r=NULL;
   if(p->data>x)
        p->l=pt;
   else
        p->r=pt;
  return lev;
}

int main(){
int x;
struct vertex *r;

r=create();
r->data=18;

printf("insert at level %d\n" ,insert(r,7,0));
printf("insert at level %d\n" ,insert(r,5,0));
printf("insert at level %d\n" ,insert(r,11,0));
printf("insert at level %d\n" ,insert(r,8,0));
printf("insert at level %d\n" ,insert(r,15,0));
printf("insert at level %d\n" ,insert(r,22,0));
printf("insert at level %d\n" ,insert(r,21,0));
printf("insert at level %d\n" ,insert(r,31,0));
printf("insert at level %d\n" ,insert(r,25,0));

return 0;
}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 挿入した木の深さを返す関数

#2

投稿記事 by みけCAT » 5年前

insert関数の最初にlevに0を代入しているのをやめるといいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

返信

“C言語何でも質問掲示板” へ戻る