【问题标题】:How to use a recursive function to print a node tree如何使用递归函数打印节点树
【发布时间】:2016-06-02 07:22:48
【问题描述】:

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

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++;
    }
}

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

【问题讨论】:

  • 对我来说看起来不错,只需添加另一个参数“深度”,这样您就知道要缩进多少子级

标签: c++ recursion treenode


【解决方案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++;
    }
}

我的回答是:很少有人打印树,尤其是纯文本,所以没有缩进标准。

【讨论】:

    【解决方案2】:

    尚未对其进行测试,但我的第一个猜测是。像这样:

    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);
        }
    } 
    

    【讨论】:

      猜你喜欢
      • 2012-11-16
      • 2019-09-09
      • 2010-12-12
      • 2015-05-24
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      • 2016-09-15
      相关资源
      最近更新 更多