如何在级别上打印树,给定一个结构,该结构保存节点的值及其父节点的值,对于树中的每个节点

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

本文关键字:结构 节点 保存 于树中 父节点 一个 打印      更新时间:2023-10-16

>我有一个数组,其中索引是节点的数据,该索引处的值是该节点的父节点。

数组 = {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;

并添加一些代码,该代码计算由许多空格字符组成的spaces字符串。 空格数应depth乘以您想要的缩进。(比如说,2 或 4。spaces字符串的计算留给读者作为练习。

string indentation方法

您需要再向函数传递一个参数,即string indentation

从外部代码调用它时,请传递一个空字符串。

然后,在 prettyPrint() 内的递归调用中,使用 indentation + " " 调用(假设您希望每个缩进级别为 2 个字符宽(。

然后,在您的cout << root;将其替换为cout << indentation << root;