プロが教えるわが家の防犯対策術!

二分木を使って正の整数の和を計算するプログラムがわかりません。どなたか教えてください。

A 回答 (3件)

スコープの問題があるので、グローバルな変数を宣言して、void treewalk(struct treenode *p)内のpri

ntfのところあたりでそのグローバル変数に加算していけばいいと思いますが?できませんか?^^
    • good
    • 1
この回答へのお礼

グローバル変数というのを用いてできました!
ありがとうございました。

お礼日時:2004/08/31 13:16

ほとんど完成していますね。


あとは、ノードの値を足し合わせてreturnするコードを追加するだけです。
treewalkの返り値をint(=ノードの数値の合計)として、

(木の合計) = (左の部分木の合計) + (自分のノード) + (右の部分木の合計)

と考え、以下のように修正すればいいです。

int treewalk(struct treenode *p)
{
if(p!=NULL)
return (treewalk(p->left) + p->value + treewalk(p->right));
else return 0;
}
    • good
    • 0
この回答へのお礼

完成しました。
ありがとうございました

お礼日時:2004/08/31 13:18

質問の意味がよくわかりません。


「ここまで出来たけど、うまく動かない・・・」等を示しましょう。

ですが、もしかして
http://santamartadotnet.hp.infoseek.co.jp/docume …
みたいなこと?

参考URL:http://santamartadotnet.hp.infoseek.co.jp/docume …

この回答への補足

説明不足ですいません。二分木にデータ(正の整数)を格納し、それらの和を求めるプログラムです。
二分木にデータを格納し、すべてのノードを訪問してそれらを足し合わせるという方向で考えています。参考書を見て、考えたプログラムを示しておきます。
このプログラムでは、
void treewalk(struct treenode *p)の関数で通りがけ順で全てのノードを訪問しています。この部分を書き換えてなんとかしようとしているのですが、どうもできません・・・。よろしくお願いします。

#include<stdio.h>
#include<malloc.h>

struct treenode{
int value;
struct treenode *left, *right;
};

struct treenode *talloc(void);
struct treenode *gentree(struct treenode *p, int *data);
void treewalk(struct treenode *p);

void main(void)
{
struct treenode *root;
int data;

root=NULL;
while(scanf("%d", &data)!=EOF){
root=gentree(root, &data);
}
treewalk(root);
}

void treewalk(struct treenode *p)
{
if(p!=NULL){
treewalk(p->left);
printf("%d\n", p->value);
treewalk(p->right);
}
}

struct treenode *gentree(struct treenode *p, int *data)
{
if(p==NULL){
p=talloc();
p->value=*data;
p->left=p->right=NULL;
} else if(p->value > *data){
p->left=gentree(p->left, data);
} else {
p->right=gentree(p->right, data);
}
return p;
}

struct treenode *talloc(void)
{
return ((struct treenode *)malloc(sizeof(struct treenode)));
}

補足日時:2004/08/31 08:07
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!