穿越一棵n树

时间:2016-11-24 20:02:34

标签: tree

我有一个n-ary树的代码。我想遍历树,但函数在无限循环中进行,并且只打印第一级子节点。它不会进入root->子向量内部,以便打印出第二级孩子。有人可以评论我做错了吗

#include <iostream>
#include <vector>

using namespace std;



class Node
{


public:

char key;
vector<Node *> child;



};

// Utility function to create a new tree node  
Node *newNode(int key)
{
Node *temp = new Node;
temp->key = key;
return temp;
}

void printTree(Node* root);

int main()
{
/*   Let us create below tree
*           A
*         / /  \  \
*       B  F   D  E
*      / \     |  /|\
*     K  J    G  C H I
*      /\            \
*    N   M            L
*/

Node *root = newNode('A');
(root->child).push_back(newNode('B'));
(root->child).push_back(newNode('F'));
(root->child).push_back(newNode('D'));
(root->child).push_back(newNode('E'));
(root->child[0]->child).push_back(newNode('K'));
(root->child[0]->child).push_back(newNode('J'));
(root->child[2]->child).push_back(newNode('G'));
(root->child[3]->child).push_back(newNode('C'));
(root->child[3]->child).push_back(newNode('H'));
(root->child[3]->child).push_back(newNode('I'));
(root->child[0]->child[0]->child).push_back(newNode('N'));
(root->child[0]->child[0]->child).push_back(newNode('M'));
(root->child[3]->child[2]->child).push_back(newNode('L'));

printTree(root);

system ("PAUSE");
return 0;

}


void printTree(Node* root)
{
    if (!root->child.empty())
        for(int i=0; i < root->child.size(); i++)
            cout<<root->child[i]->key<<endl;

    printTree(root->child);
}

1 个答案:

答案 0 :(得分:0)

我很惊讶甚至甚至为你编译 - 我正在

printTree(root->child)

这是因为您将Vector传递给递归的printTree调用,而期望指向节点的指针。我怀疑发生了什么是将向量自动转换为指针,导致一些“随机”指针,导致代码行为异常。

如果您只想打印第一个子节点,或者将递归调用移动到循环中,请尝试将printTree(&root->child[0])替换为printTree(&root->child[i]),并调用echo '\'/\\' . "'\n" ;