обход двоичного дерева - PullRequest
       5

обход двоичного дерева

1 голос
/ 19 ноября 2011

Я сделал двоичное дерево, и я пытаюсь сделать обход по порядку.Я уже сделал предварительный обход - который я, хотя и был тем, что мне было нужно.Но после поиска в Google, я обнаружил, что мне нужен почтовый перевод.Я думаю о том, что сначала выходит левый, затем правый, а затем корень (это право по порядку? :)).Я пытался реализовать это, но это выглядит немного странно, результат пришел

public static <E> String postorder(BinaryTree<E> t, Position<E> v){
    String tree = "";
    if(t.hasLeft(v)){
        tree += postorder(t, t.left(v));
    }
    tree += v.element()  +", ";
    if(t.hasRight(v)){
        tree += postorder(t, t.right(v));
    }
    return tree;
}

Мое дерево:

            45
           /   \
          22    77
         /  \      \
        11   30     90
         \    /     /
         15  25    88

Мой результат должен быть после моих знаний 15,11,25, 30,22,88,90,77,45 Но это 11,15,22,25,30,45,77,88,90

Может кто-нибудь увидеть, что я делаю не так - я пытался такмного вещей.Ничего не работает.

Ответы [ 2 ]

2 голосов
/ 19 ноября 2011

Вы звоните preorder из-за реализации postorder.


Обновление: теперь похоже, что вы выполняете обход , но звоните it postorder .

Переместить эту строку:

tree += v.element()  +", ";

до конца (прямо перед возвращением).

0 голосов
/ 07 февраля 2013
void preOrder(BSTNode *root){
    while(root != NULL){
       cout<<root->data<<endl;
       preOrder(root->left);
       preOrder(root->right);
    }
}

void postOrder(BSTNode *root){
    while(root != NULL){
       preOrder(root->left);
       preOrder(root->right);
       cout<<root->data<<endl;
    }
}

 void inOrder(BSTNode *root){
    while(root != NULL){
       preOrder(root->left);
       cout<<root->data<<endl;
       preOrder(root->right);
    }
}
...