簡體   English   中英

給定樹中每個節點的結構,該結構如何在層上打印樹,其中該結構包含節點的值及其父節點的值

[英]How to print a tree on levels, given a struct that holds the value of the node and the value of it's parent, for each node in the tree

我有一個數組,其中的索引是節點的數據,而該索引處的值是該節點的父節點。

數組= {2,7,5,2,7,7,-1,5,2}
數據---- 1,2,3,4,5,6,7,8,9

我必須這樣打印此數組:

7  
 2
  1
  4
  9
 5
  3
  8
 6

我有一個結構,該結構在兩個字段(值和父級)中都有來自數組的數據,然后我創建了一個t數組,其中包含樹中每個節點的那些屬性。

struct t{
    int value;
    int parent;
};
t tree[n];

這是我現在想出的。 這將以正確的順序打印節點,但是我不知道如何添加空格(“”)以突出顯示樹的級別。 我希望你們能給我一些想法。

void preetyPrint(t tree[], int n, int root)
{
    cout << root;
    cout << endl;

    for(int i = 0; i < n; i++)
    {
        if (tree[i].parent == root)
        {
            preetyPrint(tree, n, tree[i].value);
        }
    }
}

我很抱歉這個問題的模棱兩可,我是新來的。 仍在學習發布好問題。

有兩種解決方法:

int depth方法

您需要再向函數傳遞一個參數int depth

當您從外部代碼調用它時,請傳遞0作為深度。

然后,在prettyPrint()內的遞歸調用中,使用depth + 1調用。

然后,在您的cout << root; cout << spaces << root;替換它cout << spaces << root;

並添加一些代碼,該代碼計算由多個空格字符組成的spaces字符串。 空格數應乘以depth乘以您希望縮進的大小。 (說2或4。) spaces字符串的計算留給讀者練習。

string indentation方法

您需要再向函數傳遞一個參數,即string indentation

當您從外部代碼調用它時,請傳遞一個空字符串。

然后,在prettyPrint()內的遞歸調用中,使用indentation + " "調用(假設您希望每個縮進級別為2個字符寬。)

然后,在您的cout << root; cout << indentation << root;替換它cout << indentation << root;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM