【问题标题】:binary tree traversal二叉树遍历
【发布时间】:2012-01-01 22:04:05
【问题描述】:

我已经制作了一棵二叉树,并且正在尝试进行后序遍历。我已经进行了预购遍历——尽管这正是我所需要的。但是在谷歌搜索遍历之后,我发现这是我需要的后序。 我的想法是遍历首先出现左侧,然后是右侧,然后是根(它是后序对吗?:))。 我试图实现它,但结果看起来有点奇怪

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

谁能看到我做错了什么 - 我已经尝试了很多事情。没有任何效果。

【问题讨论】:

    标签: java binary-tree


    【解决方案1】:

    您从postorder 的实现中调用preorder


    更新:现在看起来您正在执行 in-order 遍历,但 将其称为 postorder

    移动这一行:

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

    到最后(在返回之前)。

    【讨论】:

    • 它现在更新了。你能看到错误吗?它是按顺序而不是后序出现的
    【解决方案2】:
    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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-11-11
      • 1970-01-01
      • 2021-11-20
      • 2021-03-08
      • 2020-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多