2012-03-25 60 views
1

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

编辑:例如,我有输入作为L,M,R,T,S,G,Y,S,d,E,C,使用序遍历A.,我得到这个输入

   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; 
} 
+0

没有树的实施有一个链接到他们的父节点?如果是这样,我认为应该可以做到这一点。如果没有,那么你可以运行一个正常的打印并将这些值存储在一个数组中,然后向后遍历它(尽管这样做效率很低)。 – twain249 2012-03-25 23:17:24

+0

“颠倒”是什么意思? – 2012-03-25 23:17:52

+0

是的,有左和右指针。 – Spincel 2012-03-25 23:18:18

回答

0

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

即,在深度D处,我有我需要打印的元素,因此它们每个都获得宽度linewidth>>D

0

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

  • 第一功能 - 通过水平打印水平(根LV - >叶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