No.2
- 回答日時:
ほとんど完成していますね。
あとは、ノードの値を足し合わせてreturnするコードを追加するだけです。
treewalkの返り値をint(=ノードの数値の合計)として、
(木の合計) = (左の部分木の合計) + (自分のノード) + (右の部分木の合計)
と考え、以下のように修正すればいいです。
int treewalk(struct treenode *p)
{
if(p!=NULL)
return (treewalk(p->left) + p->value + treewalk(p->right));
else return 0;
}
No.1
- 回答日時:
質問の意味がよくわかりません。
「ここまで出来たけど、うまく動かない・・・」等を示しましょう。
ですが、もしかして
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)));
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# C言語で移動平均のプログラムを作りたいのですが、数値をファイルから取ってきて計算をするプログラムはど 1 2022/09/29 01:21
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# c言語で自然数nを入力、2以上n以下の偶数の累積sumを求めるプログラムをfor文を使って作りたいで 4 2022/11/09 14:10
- C言語・C++・C# 【CASLプログラム】 定数(80と55)を確保し、その和をGR1に、その差をGR2に求めるCASL 1 2022/12/16 01:17
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- 数学 至急!研究の統計について 6 2023/07/12 00:38
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- C言語・C++・C# プログラム内から、MIDIファイルの一部分だけを再生する方法 1 2023/02/15 11:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
昔Winnyってありましたけど、あ...
-
TreeViewの追加 C++Builder
-
CPUの考え方を教えてください ...
-
C++Builder 6でツリービュー(...
-
あるノードリストに、特定の名...
-
C++言語のプログラムをfortran...
-
ノードとは
-
ルート要素ノードが2個ある場合?
-
同じタグ名の項目取得
-
4色定理はなぜグラフ理論で証...
-
線形リストに挿入するプログラム
-
VB6.0でDOMを使用して...
-
ノード数とは?
-
コンテキストメニュークリック...
-
2分探索木の高さを求めるプロ...
-
C言語 TreeViewのノードをプロ...
-
TreeView と DOMツリー
-
東芝のDynabookなのですがアン...
-
タグの有無の判定
-
VBSでXMLを読込、検索結果をテ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CPUの考え方を教えてください ...
-
昔Winnyってありましたけど、あ...
-
SNMP リンクダウンとノードダ...
-
ルート要素ノードが2個ある場合?
-
同じタグ名の項目取得
-
ノードとは
-
あるノードリストに、特定の名...
-
TreeView の初期表示について
-
ツリービューのノードをダブル...
-
コンテキストメニュークリック...
-
ノード数とは?
-
XML文書の指定した属性値を持つ...
-
複数のマックPCによる数値計算...
-
C#でtreeviewの指定ノードを選...
-
VB6.0ツリービューについて
-
TreeViewの再表示のちらつきを...
-
VB6.0でDOMを使用して...
-
vbsのDOMDocumentで要素のText...
-
TreeViewで複数ノードの選択は...
-
C# TreeView 効率良いノード追...
おすすめ情報