Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
alts1981
0 / 0 / 0
Регистрация: 24.09.2015
Сообщений: 28
1

Бинарное дерево -прохождение по уровням

22.09.2016, 11:28. Просмотров 378. Ответов 0
Метки нет (Все метки)

Здравствуйте ! Нужна помощь в написании кода для вывода бинарного дерева по уровням ( не знаю как точно это по русски, по английски - level order traversal). Вроде бы и алгоритм уже есть, но маленькая проблема - реализация очереди на основе списка. То есть даже не она сама - не знаю как передать первый узел дерева в очередь . Ведь элемент очереди состоит из узла дерева и указателя на следующий узел, а мне нужно передать только сам узел. И затем передавать temp->left и temp->right , если они не NULL - та же проблема.В общем вот мой код - буду очень признателен за помощь.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#define _CRT_SECURE_NO_WARNINGS
#define MaxQueue 100
 
#include <stdio.h>
#include <stdlib.h>
 
 
typedef struct bin_tree {
    int val;
    struct bin_tree * right, *left;
 
}bin_tree;
 
typedef bin_tree node;
 
typedef struct queuenode {
    bin_tree  bstelement;
    struct queuenode* next;
}queuenode;
 
 
 
void insert(node**, int);
void enqueue(queuenode**, queuenode**, int);
void levelbylevel(node*, queuenode**, queuenode**,int);
void dequeue(queuenode**, queuenode**);
 
void levelbylevel(node* root, queuenode**front, queuenode** rear,int data) {
 
    queuenode* temp=NULL;
    
    if (root == NULL)
        return;
    
    //temp=createqueue
    enqueue(front, rear, data);
    
    while (temp != NULL) {
        temp = *front;
        dequeue(front, rear);
        printf("%d", temp->bstelement.val);
        if (temp->bstelement.left != NULL)
            enqueue(front, rear, temp->bstelement.left->val)//enqueue(temp->left);
        else if (temp->bstelement.right != NULL)
            enqueue( front, rear, temp->bstelement.right->val)//enqueue(temp->right);
    
    
    }
    
 
 
 
}
 
 
 
void enqueue(queuenode** front, queuenode** rear,int x) {
    queuenode* temp =
        (queuenode*)malloc(sizeof(queuenode));
    temp->bstelement.val = x;
    temp->next = NULL;
    if (*front == NULL && *rear == NULL) {
        *front = *rear = temp;
        return;
    }
    (*rear)->next = temp;
    *rear = temp;
}
 
void dequeue(queuenode** front, queuenode** rear) {
    queuenode* temp = *front;
    if (*front == NULL) {
        printf("Queue is Empty\n");
        return;
    }
    if (*front == *rear) {
        *front = *rear = NULL;
    }
    else {
        *front = (*front)->next;
    }
}
 
 
void insert(node **p, int value)
{
    node *temp = NULL;
    if ((*p) == NULL) // empty tree
    {
        temp = (node*)malloc(sizeof(node));
        temp->val = value;
        temp->left = temp->right = NULL;
        *p = temp;
    }
    else
    {
        if (value >(*p)->val)
            insert(&(*p)->right, value);
        else
            insert(&(*p)->left, value);
    }
}
void main()
{
    queuenode *front = NULL, *rear = NULL;
    node *root=NULL;
    insert(&root, 35);
    insert(&root, 20);
    insert(&root, 16);
    insert(&root, 24);
    insert(&root, 37);
    insert(&root, 45);
    insert(&root, 3);
    insert(&root, 26);
    insert(&root, 42);
    insert(&root, 50);
 
    levelbylevel(root, &front, &rear, root->val);
    printf("\n");
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2016, 11:28
Ответы с готовыми решениями:

Бинарное дерево
Здравствуйте! У меня есть 2 функции для создания дерева и 1 для прохода по дереву. Каждый раз при...

Бинарное дерево
Здравствуйте.Учусь в техникуме,начали изучать СИ(Обычный СИ.Со следующей недели начнем учить...

Бинарное дерево не создается
здраствуйте я написал функцию создания и записи в дерево но она не работает. ptree Form() {...

Бинарное дерево поиска
Здравствуйте! Дали такое задание. И нужно вместо троеточий вставить несколько строчек. Как я поняла...

Как создать бинарное дерево
Я не могу понять как создать бинарное дерево помогите пожалуйста

0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2016, 11:28

Стек, бинарное дерево и очередь
Помогите,плииииз, я думаю все через єто прошли... то просто я даже не могу понять что от мены...

Упорядочить бинарное дерево по алфавиту
Люди, может то знает, как сортировать бинарное дерево по алфавиту? Язык си Добавлено через 3...

Бинарное дерево. Создание объекта
И снова здравствуйте. Извините, что расплодил темы, но тут, как я понял один вопрос, одна тема, а у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.