[英]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.