Построение бинарного дерева поиска из обхода предварительного заказа итеративно (не рекурсия)

0

Ниже приведен код для преобразования обхода предзаказов двоичного дерева поиска в исходное дерево.

Следующий код принимает массив целых чисел, которые представляют собой предварительный обход дерева двоичного поиска. Возвращается корень дерева конструкции.

struct Node* constructTree(int pre[], int size)
{
    stack<struct Node* > s;
    int i;
    struct Node* root=newNode(pre[0]);
    struct Node* temp;
    struct Node* top_node;
    s.push(root);
    for(i=1;i<size;i++)
    {
        temp=NULL;
        while(!s.empty()&&pre[i]>(s.top()->data))
            {
                temp=s.top();
                s.pop();
            }
            if(temp==NULL)
            {
                top_node=s.top();
                top_node->left=newNode(pre[i]);
                s.push(top_node->left);
            }else
            {
                temp->right=newNode(pre[i]);
                s.push(temp->right);
            }
    }


    return root;
}

Источник: http://www.geeksforgeeks.org/construct-bst-from-given-preorder-traversal-set-2/

Мне трудно понять этот код. Может ли кто-нибудь помочь мне понять следующее:

  1. На любой заданной итерации какие значения хранятся в стеке по отношению к текущему значению, указываемому pre[i]

  2. Есть ли другой итеративный метод для построения BST из заданного обхода порядка?

Спасибо.

Теги:
algorithm
data-structures
tree
binary-tree

1 ответ

1

После итерации, где сконструирован узел, содержащий pre[i], стек содержит этот узел сверху, под которым верхний и нижний корневые предки с одним ребенком хранятся сверху вниз.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню