2012-03-25 53 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