二叉树遍历

时间:2011-11-19 13:22:13

标签: java binary-tree

我已经制作了一个二叉树,我试图进行后序遍历。我已经进行了前序遍历 - 我虽然是我需要的。但谷歌搜索遍历后,我发现它是我需要的后序。 我的想法是关于遍历,首先是左边出来,然后右边然后是根(它是后序对吗?))。 我试图实现它,但看起来有点奇怪

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 个答案:

答案 0 :(得分:2)

您正在preorder的实施中致电postorder


更新:现在看起来您正在进行按顺序遍历,但正在调用 后期订单

移动此行:

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

到最后(在返回之前)。

答案 1 :(得分:0)

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);
    }
}