我有一个传递节点树的函数。 该函数应该以这种形式打印节点树:
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++;
}
}
我的问题是:是否有一种标准的方法来迭代和打印具有正确缩进的节点树?
答案 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);
}
}