Почему я не могу создать линейную структуру с моим двоичным деревом поиска? - PullRequest
0 голосов
/ 28 мая 2020

Я хочу создать линейную структуру с помощью моего BST, но после использования этой функции ниже я теряю связи между узлами дерева.

В дереве у меня есть узлы (levelOrder):

4

23

2357

когда я использую функцию makeLineStructure, вывод будет:

4

6

7

если я вращаю дерево вручную, вывод правильный.

void rotate_right(struct tree_node **root){
    if((*root) != NULL && (*root)->left_child != NULL){
        struct tree_node *new_root = (*root)->left_child;
        struct tree_node *old_right_child_of_new_root = (*root)->left_child->right_child;
        new_root->right_child = (*root);
        (*root)->left_child = old_right_child_of_new_root;
        (*root) = new_root;
    }
}

void makeLineStructure(struct tree_node **root){
    struct tree_node *tmp = (*root);
    while(tmp != NULL){
        if(tmp->left_child != NULL){
            rotate_right(&tmp);
        }else{
            tmp = tmp->right_child;
        }
    }
}
...