从上到下横向打印BST

时间:2012-03-25 23:13:00

标签: c++ stl binary-search-tree

我有一个与BST打印相关的问题。我可以使用不同的树打印算法横向打印树。但是,我总是从左到右打印树。那么有什么方法可以颠倒打印树吗?我看到了使用XY的一些想法,但我不想在控制台中这样做,所以有没有不同的方法来实现同样的事情?

编辑:例如,我输入L,M,R,T,S,G,Y,S,D,E,C,A。使用inorder遍历,我得到了这个输入

              Y
          T
              S
       R
    M
 L
    G
          E
       D
          C
             A

我想要的是将此旋转90度向右旋转,L应该在顶部,然后是其他。

编辑2:这是使用Level Order打印树的代码,但是,我不知道如何将格式显示为我想要的。

queue<TreeNode*> q;

while(node != NULL)
{
    cout << node->data << " " << endl;
    if (node->left)
        q.push(node->left);
    if(node->right)
        q.push(node->right);
    if(!q.empty())
    {
        node = q.front();
        q.pop();
    }
    else
        node = NULL;
}

3 个答案:

答案 0 :(得分:0)

您的意思是Breadth-First Search吗?

答案 1 :(得分:0)

你会怎样亲手做到这一点?这才是真正的问题; C ++代码只是写下所有步骤。我的方法是在中心打印顶部节点L,因此前面有40个空格。第二级节点,我打印前面有20(G)然后40(M)个空格。第三级,我打印10个空格,然后是C,然后是20个空格等......

即。在深度D,我需要打印2个 D 元素,因此每个元素的宽度都为linewidth>>D

答案 2 :(得分:0)

这是我的代码。它打印得非常好,也许它不完全对称。 小描述:

  • 第一个功能 - 逐级打印(root lv - &gt;离开lv)
  • 第二个功能 - 距新行开头的距离
  • 第三功能 - 打印节点并计算两次打印之间的距离;
void Tree::TREEPRINT()
{
    int i = 0;
    while (i <= treeHeight(getroot())){
        printlv(i);
        i++;
        cout << endl;
    }
}

void Tree::printlv(int n){
    Node* temp = getroot();
    int val = pow(2, treeHeight(root) -n+2);
    cout << setw(val) << "";
    prinlv(temp, n, val);
}

void Tree::dispLV(Node*p, int lv, int d)
{
    int disp = 2 * d;
    if (lv == 0){
        if (p == NULL){

            cout << " x ";
            cout << setw(disp -3) << "";
            return;
        }
        else{
            int result = ((p->key <= 1) ? 1 : log10(p->key) + 1);
            cout << " " << p->key << " ";
            cout << setw(disp - result-2) << "";
        }
    }
    else
    {
        if (p == NULL&& lv >= 1){
            dispLV(NULL, lv - 1, d);
            dispLV(NULL, lv - 1, d);
        }
        else{
            dispLV(p->left, lv - 1, d);
            dispLV(p->right, lv - 1, d);
        }
    }
}   

输入:

50-28-19-30-29-17-42-200-160-170-180-240-44-26-27

输出:https://i.stack.imgur.com/TtPXY.png