0

私のプロジェクトには、ツリーを引数として取り、入力された整数の数と正しい呼び出しを返す関数が必要です。

予約だけじゃないの?以下のように。お願いします。ありがとう

#include "t.h"
void preorder(tnode * t){
if (t == NULL) return;
cout << t->info <<endl;
preorder(t->left);
preorder(t->right);
}

呼び出しは preorder(t) になります。

これは私が持っている元の機能です

 #ifndef T_H

#define T_H

#include <iostream>
#include <iomanip>
using namespace std;

struct tnode {
    int info ;
    int count;
    tnode * right, *left;
};

tnode * insert(int target,tnode * t);
tnode * makenode(int x);
tnode * tsearch(int x,tnode * t);
void inorder(tnode * t);
int height(tnode * t);
int count(tnode * t) ;
int total(tnode * t) ;

#endif

int main() {
int n,c;
tnode * t = NULL, *x;
    while (cin >> n) {t=insert(n,t);cout << n <<' ';}
    cout << endl;
    inorder(t);
    cout << endl;
    c = count(t);
    cout << "count: "<< c  <<endl;
    cout << endl;
    c = height(t);
    cout << "height: "<< c  <<endl;
    cout << endl;
    c=200;
    while (c-->0) if (x = tsearch(c,t)) cout << c << " is on the tree."<<endl;
return 0;
}

#include "t.h"

int count(tnode * t) {
    if (t == NULL) return 0;
    return 1 +  count(t->left) + count (t->right);
}

#include "t.h"

int height(tnode * t) {
    if (t == NULL) return -1;
    return 1 + max(height(t->left) , height (t->right));
}

#include "t.h"

//write out t in order
void inorder(tnode * t) {
    if (t == NULL) return;
    inorder (t->left);//write out lst in order
    cout <<setw(5) << t->info <<setw(5) << t->count<< endl;
    inorder (t->right);//write out rst in order
}

#include "t.h"

tnode * insert(int x, tnode * t) {
tnode * tmp = tsearch(x,t);
if (tmp != NULL) {
    tmp->count++;
    return t;
}
if (t == NULL) return makenode(x);
if ( x < t->info ) {
    t->left = insert(x,t->left);
    return t;
}
t->right = insert(x,t->right);
return t;
}

#include "t.h"

tnode * makenode(int x) {
tnode * t = new tnode;
    t->info =x;
    t->count =1;
    t->right = t->left = NULL;
return t;
}
4

2 に答える 2

0

ユーザーが数値を入力すると、insert関数はカウント 1 の新しいノードを挿入するか、既存のノードのカウントに追加します。ツリー内の要素の数を合計する必要があります。

int tcount(tnode * t){
    if (t == NULL) return 0;
    return t->count + tcount(t->left) + tcount(t->right);
}

典型的な呼び出しは

tnode * root = NULL;

/* insert stuff into the tree */

int count = tcount(root);
于 2013-08-07T18:27:51.250 に答える
0

まず、関数を無効にすることはできません。入力された int の数を返す必要があるため、int または int* を返す必要があります。

次に、ツリーは入力されたすべての int を持つバイナリ ツリーですか? もしそうなら、どのツリートラバーサルアルゴリズムでも構いません。新しいノードを見つけたときにインクリメントする変数が必要なだけです (それらがすべて int を格納していると仮定します)。

int preorder(tnode * t){
  if (t == NULL) return 0;

  else{
     return 1 + preorder(t->left) + preorder(t->right);
  }
}

t が null でない場合、1 つの int が格納されます。次に、ノードの子を確認するだけです。

于 2013-08-07T18:24:04.663 に答える