如何使用递归函数来打印节点树

时间:2016-06-02 07:22:49

标签: c++ recursion treenode

我有一个传递节点树的函数。 该函数应该以这种形式打印节点树:

root
 node
  node
  node
 node
 node
  node
   node
 node

我似乎无法绕过如何做到这一点。 这是我到目前为止所得到的:

void IterateTree(Node &rNode )
{
    printf("\t\n");
    std::cout << rNode.Name() << std::endl;

    int i = 0;
    for (std::list<Node>::iterator it = rNode.childs.begin(); it != rNode.childs.end(); ++it)
    {
        printf("%d: ", i);
        IterateTree(*it);
        printf("\b");
        i++;
    }
}

我的问题是:是否有一种标准的方法来迭代和打印具有正确缩进的节点树?

2 个答案:

答案 0 :(得分:1)

使用另一个参数来跟踪递归的“深度”

void IterateTree(Node &rNode , int depth)
{
    printf("\t\n");
    std::cout << rNode.Name() << std::endl;

    int i = 0;
    for (std::list<Node>::iterator it = rNode.childs.begin(); it != rNode.childs.end(); ++it)
    {
        for(int j=0; j<depth; j++){printf(" ");}
        printf("%d: ", i);
        IterateTree(*it, depth+1);
        printf("\b");
        i++;
    }
}

我的答案是:很少有人打印树木,特别是不是纯文本,因此缩进没有标准。

答案 1 :(得分:0)

Haven没有测试过,但我的第一个猜测是......像这样:

void iterateTree(Node &node, int level = 0){
    for(int i = 0; i < level; i++) printf("\t"); //foreach level print a tab

    cout << rNode.Name() << endl; //output the node

    int i = 0;
    level += 1; //if the for runs there is a next level
    for(list<Node>::iterator it = r.Node.childs.begin(); it != rNode.childs.end(); ++it){
        iterateTree(it, level);
    }
}