Mamoutif Ответов: 1

Как исправить эти синтаксические ошибки ?


Меня попросили написать программу, которая должна делать следующее;
- постройте двоичное дерево поиска, используя массивы и указатели. Значения, хранящиеся в узлах, являются действительными числами.
- Траверс бинарное дерево в обычном 3-мя способами: симметричного, до того и после заказать.

Поэтому, прежде чем непосредственно писать всю программу, я хотел, по крайней мере, написать одну, используя только указатели. Затем, если это сработает, я бы добавил строки requierd, чтобы код мог построить BST либо с помощью указателей, либо с помощью массива в зависимости от выбора пользователя.

Ниже находится код, который я пробовал, и проблема заключается в том, что я не знаю, как исправить синтаксические ошибки в функциях в операторах case.

Что я уже пробовал:

#include <iostream>
using namespace std;

struct node {
	float info;
	node * left;
	node * right;
	};

typedef node *tree;    // to store the address of the root node.

void build(node *t, float x){
	if (t == NULL){
		t = new node;
		t -> info = x;
		t -> left =   NULL;
		t -> right = NULL;
    }
	else{
		if (t -> info >= x)
			build (t -> left, x);
		else
			build(t-> right, x);
	}
}


void inorder(tree t){
	if (t -> left != NULL)
		inorder (t -> left);
	cout << t -> info <<" ";
	if (t -> right != NULL)
		inorder (t -> right);
}


void preorder(tree t){
	if (t != NULL){
		cout << t -> info <<" ";
		preorder(t -> left);
		preorder(t -> right);
	}
}

void postorder(tree t){
	if (t -> left != NULL)
		postorder(t -> left);
    if (t -> right != NULL)
    	postorder(t -> right);
    cout << t -> info <<" ";
}

int main() {
b:	cout << "Choose among the following actions" << endl;
	cout << "1. Build a binary search tree"<< endl;
	cout << "2. Traverse the tree in order"<< endl;
	cout << "3. Traverse the tree in pre order"<< endl;
	cout << "4. Traverse the tree in post order"<< endl;
	cout << "5. Quit"<< endl;

	float s;

	int choice;
	cin >> choice;

	switch(choice){
	case 1:
		build(node*,s);
		break;
	case 2:
		inorder(node*);
		break;
	case 3:
		preorder(node*);
		break;
	case 4:
		postorder(node*);
		break;
	case 5:
		goto a;
		break;
	default :
		goto b;
		break;

	}

a:	return 0;
}

1 Ответов

Рейтинг:
9

Jochen Arndt

Вы вызываете функции из своих корпусов коммутаторов. Они требуют передачи существующих параметров и параметров сопоставления типов.

Примеры:

float s = 1.0f;
// An instance of struct node
node head;
// Initialise it
head.info = 0;
head.left = NULL;
head.right = NULL;
// May do it also in a single line setting all mebers to zero: 
//node head = { 0 };
// An initialised tree (node*) instance
tree root = &head;

// Parameters are of type node* and float
build(&head, s);
// Parameter is of type tree (node*)
inorder(root);


Mamoutif

Большое вам спасибо, господин Йохен Арндт. Я действительно ценю это.