Войти

Показать полную графическую версию : Дерево


svdanik
15-11-2010, 20:17
Есть такое дерево
struct node
{
int data;
char data_s[256];
struct node *left, *right;
};
typedef struct node node;
void insert(node *new_leaf,node *root);
node *root=NULL;
node *new_leaf=NULL ;
node *c=NULL;
char temp[256];
void main(void)
{

printf(" Enter the elements of the tree (type 0 to exit) \n");
while(1)
{
scanf("%255s",temp);
if(*(temp)=='0')
break;
new_leaf=(node*)malloc(sizeof(node));
new_leaf->left=new_leaf->right = NULL;
new_leaf->data=strlen(temp);
sprintf(new_leaf->data_s,"%s",temp);
if( root == NULL)
root=new_leaf;
else
insert(new_leaf,root);

};


}

void insert(node *new_leaf,node *root)
{
if( new_leaf->data>root->data)
{
if( root->right == NULL)
root->right=new_leaf;
else
insert( new_leaf,root->right);
};
if( new_leaf->data <= root->data)
{
if( root->left == NULL)
root->left = new_leaf;
else
insert( new_leaf,root->left);
};
}

Вопрос такой: как вывести на екран все правые вершыни?

ganselo
16-11-2010, 07:56
void show(struct node *usel)
{
if(!usel) return;
// show(usel->left);
printf("usel.data=%i, usel.data_s=%s\r\n", usel.data, usel.data_s);
show(usel->right);
}

svdanik
18-11-2010, 08:59
Ета функцыя выведет только правиеправие вершыны. А если сначало на лево а потом на право???

ganselo
18-11-2010, 10:54
Ета функцыя выведет только правиеправие вершыны. А если сначало на лево а потом на право??? »
Вам нужно правую ветку распечатать? Если так то:

void show(struct node *usel)
{
if(!usel) return;
show(usel->left);
printf("usel.data=%i, usel.data_s=%s\r\n", usel.data, usel.data_s);
show(usel->right);
}

//вызываем
show(root->right); //передаём правую ветку

svdanik
20-11-2010, 12:16
Вот задаю такие числа : 6,8,3,4,5
Мне надо чтобы вывело: 8, 4,5




© OSzone.net 2001-2012