2015-04-06 4 views
0

Я использую два указателя в корневом каталоге и в верхней части BST. верхний указатель перемещается вдоль дерева для вставки и отображения. Теперь мой вопрос в том, что в моем коде inorder. я переместить верхний указатель вниз по дереву до времени NULL найден через рекурсию следующим образомДвоичное дерево поиска Отображение дерева порядка

void display() 
{ 

    if(top->left!=NULL) 
    { 
     top=top->left; 
     display(); 
    } 

    cout<<"\n\nnow the address of top is "<<top; 
    return; 
} 

элементы дерева являются в настоящее время 12 11 и 10; теперь в последнем рекурсивном вызове fuction верхний указатель перемещается в 10, но как переместить верхний указатель назад после последней функции i; в каждом cout адрес вершины из 10 означает, что указатель остается на 10, даже если элемент управления возвращается к предыдущей рекурсивной функции. в этом коде есть две рекурсивные функции, отображение называется tWo раз, после второй функции отображения верхний указатель не перемещается вверх по дереву, а остается на 10, я хочу переместить верхний указатель назад после завершения каждой рекурсивной функции отображения , Помогите. НО БЕЗ ПРИВЛЕЧЕНИЯ АРГУМЕНТОВ В ФУНКЦИИ ДИСПЛЕЯ.

+1

_ «НО БЕЗ ПРИВЛЕЧЕНИЯ АРГУМЕНТОВ В ФУНКЦИИ ДИСПЛЕЯ». _ ** ПОЧЕМУ??? ** –

+1

Поскольку у вас нет ссылок на родительский узел, вам придется использовать «стек», чтобы нажать настоящего узла, до перехода к поддереву или узлу. –

ответ

1

В этом примере ваш код, кажется, спускается по левой стороне каждого дерева (но игнорирует правую сторону).

if(top->left!=NULL) 
{ 
    top=top->left; 
    display(); 
} 

Как правило, BST имеет узлы, каждый узел имеет данные, а PTR для левого ребенка, и PTR на право ребенка.

И кажется, что ваши узлы еще не содержат метод «display()».


В дереве, я подозреваю, что вы хотите, чтобы ссылаться

<a node> -> display(); 

Чтобы избежать передач указателей в вашем рекурсивноге «дисплей» звонки.

Далее, ваши имена вводят в заблуждение (для меня). Поэтому, возможно, если вы переименуете некоторые вещи, следующее может быть подходящим и более понятным для вас.

Для каждого узла требуется как минимум 3 части, а также метод отображения. Для поиска по глубине, в режиме онлайн, возможно, следующее вызовет некоторые мысли.

Node::display(void) 
{ 
    // first, display nodes of left side-of-tree 
    if(nullptr != left) 
    { 
     left->display(); 
    } 
    // else no left node available 


    // for in-order, cout the data at this node 
    std::cout << data << std::endl; 


    // continue the depth-first display by tracing the right side 
    if (nullptr != right) 
    { 
     right->display(); 
    } 
} 

Для начала дорожки отображения необходимо иметь якорь дерева. Возможно, что-то вроде:

Tree::display() 
{ 
    if(tree.Top) // is tree not empty? 
     tree.Top->display(); 
    ... 

Итак ... Я предлагаю класс для дерева, другой класс для узла, метод отображения для дерева, способ отображения для узла и т.д.

Надеются, что это помогает. .. Удачи.

Смежные вопросы