Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Дерево (http://forum.oszone.net/showthread.php?t=191306)

svdanik 15-11-2010 20:17 1543380

Дерево
 
Есть такое дерево
Код:

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 1543666

Код:

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 1545446

Ета функцыя выведет только правиеправие вершыны. А если сначало на лево а потом на право???

ganselo 18-11-2010 10:54 1545520

Цитата:

Цитата svdanik
Ета функцыя выведет только правиеправие вершыны. А если сначало на лево а потом на право??? »

Вам нужно правую ветку распечатать? Если так то:
Код:

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 1547039

Вот задаю такие числа : 6,8,3,4,5
Мне надо чтобы вывело: 8, 4,5


Время: 18:00.

Время: 18:00.
© OSzone.net 2001-