chenzhaohonggd
BAN USERramu is a comedian? :p
- chenzhaohonggd September 27, 2010Here is the code, runnable
class binaryNode
{
public:
string value;
binaryNode *parent;
list<binaryNode*> children;
binaryNode(string& name)
{
value = name;
parent = NULL;
}
};
int calculateLevel(string& line, string& value)
{
int level = 0;
int i;
for(i=0; i<line.length(); i++)
{
if(line[i] == '_')
level++;
else
break;
}
value = string(line, i, (line.length()-i));
return level;
}
binaryNode* createTree(string& input)
{
binaryNode* root = new binaryNode(string("root"));
string line;
istringstream ss(input, ios::in);
binaryNode* current = root;
int curLevel = -1;
while(getline(ss, line))
{
string value;
int level = calculateLevel(line, value);
if(level==curLevel)
{
current = current->parent;
curLevel--;
}
else if(level<curLevel)
{
while(level<curLevel)
{
current = current->parent;
curLevel--;
}
current = current->parent;
curLevel--;
}
else;
binaryNode *newNode = new binaryNode(value);
newNode->parent = current;
current->children.push_back(newNode);
current = newNode;
curLevel++;
}
return root;
}
void printTree(binaryNode* root)
{
if(root == NULL)
return;
cout << root->value << endl;
list<binaryNode*>::iterator iter = root->children.begin();
while(iter!=root->children.end())
{
printTree(*iter);
iter++;
}
}
i tried and it worked. so i think it equals to the simply y = x; just passed by a pointer.
- chenzhaohonggd September 30, 2010