Сортировка бинарного дерева

232
20 июня 2018, 20:30

Есть вот такая вот программа которая входящие данные забивает в бинарное дерево, а потом считает количество обращений к элементам. Нужно после выведения массива отсортированного по алфавиту вывести массив отсортированный по количеству обращений к элементам. Как это можно сделать? Нужно создавать отдельный массив, забивать элементами бинарного дерева и его уже сортировать или есть еще варианты как это можно сделать?

#include <iostream>
#include <string>
using namespace std;
struct Node
{
    int count;
    char str1[32];
    char str2[32];
    Node *r, *l;
};
void show(Node *&Tree)
{
    if (Tree != NULL)
    {
        show(Tree->l);
        cout << Tree->count<<" " << Tree->str1<<" "<<Tree->str2<<endl;
        show(Tree->r);
    }

}
void addNode(char* x,char* y,Node *&MyTree)
{
    if (NULL==MyTree)
    {
        MyTree = new Node;
        strcpy_s(MyTree->str1, x);
        strcpy_s(MyTree->str2, y);
        MyTree->count = 0;
        MyTree->l = MyTree->r = NULL;
    }
    if (MyTree != NULL){

        int k = strcmp(x, MyTree->str1);
        if (k < 0)
        {
            if (MyTree->l != NULL) addNode(x, y, MyTree->l);
            else
            {
                MyTree->l = new Node;
                MyTree->l->l = MyTree->l->r = NULL;
                strcpy_s(MyTree->l->str1, x);
                strcpy_s(MyTree->l->str2, y);
                MyTree->l->count = 0;
            }
        }
        if (k > 0)
        {
            if (MyTree->r != NULL) addNode(x, y, MyTree->r);
            else
            {
                MyTree->r = new Node;
                MyTree->r->l = MyTree->r->r = NULL;
                strcpy_s(MyTree->r->str1, x);
                strcpy_s(MyTree->r->str2, y);
                MyTree->r->count = 0;
            }
        }
    }
}
void count(char* x,Node *&MyTree)
{
    int k = strcmp(x, MyTree->str1);
    if (k == 0)
    {
        MyTree->count += 1;
    }
    else
    {
        if (k<0)
        {
            count(x, MyTree->l);
        }
        if (k>0)
        {
            count(x, MyTree->r);
        }
    }

}

    void sort(Node *&Tree)
    {
    }
int main()
{
    Node *Tree = NULL;
    char x[32];
    char y[32];
    while (x != "yyy")
    {
        cin >> x;
        if (strcmp(x, "yyy") == 0)break;
        cin >> y;
        addNode(x, y, Tree);
    }

    while (x != "yyy")
    {
        cin >> x;
        if (strcmp(x, "yyy") == 0)break;
        count(x, Tree);
    }
    show(Tree);
    cout << endl;
    system("pause");
    return 0;
}
READ ALSO
Замена подстроки в строке с++

Замена подстроки в строке с++

Есть в котором встречаются <i> и </i>Заменить каждое вхождение <i> на <курсив>, а каждое вхождение </i> на <конец курсив>

178
Проверка числа на n-значность числа

Проверка числа на n-значность числа

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

301
Ошибка в консоли js - скрипт работает

Ошибка в консоли js - скрипт работает

(index):22 [Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experienceFor more help, check https://xhr

178