Amazon Interview Question
Software Engineer / DevelopersCountry: United States
Interview Type: Phone Interview
ooh I hate those who maintain this website..
if you leave empty lines in the code it always look crapy when posted..
Well I needed java, I posted something below. Your approach seems correct. Just that I was having difficulty in Java using List. Syntax issues.
This looks like C but thanks anyways
c++ code:
-------------
class NODE{
public:
string Label
vector<NODE*> children;
};
vector<Node*>
reverseTreeandReturnListwithLeafNodes(NODE* n)
{
vector<Node*> roots;
reverseTree(roots, n);
return roots;
}
NODE*
reverseTree(vector<Node*>& roots, NODE* n)
{
vector<NODE*>& chldrn = n->children;
if (chldrn.empty()) {
roots->push_back(n);
return n;
}
vector<NODE*> children = chldrn;
chldrn.clear();
vector<NODE*>::iterator iter = children.begin();
for (; iter != children.end(); ++iter) {
NODE* child = *iter;
NODE* p = reverseTree(child);
p->children.push_back(child);
}
return n;
}
sorry I made a small mistake. it should be NODE* p = reverseTree(n); instead of NODE* p = reverseTree(child); reposting the correct code:
class NODE{
public:
NODE(string d) : data(d) {}
string data;
vector<NODE*> children;
};
vector<NODE*>
reverseTreeandReturnListwithLeafNodes(NODE* n)
{
vector<NODE*> roots;
reverseTree(roots, n);
return roots;
}
NODE*
reverseTree(vector<NODE*>& roots, NODE* n)
{
vector<NODE*>& chldrn = n->children;
if (chldrn.empty()) {
roots.push_back(n);
return n;
}
vector<NODE*> children = chldrn;
chldrn.clear();
vector<NODE*>::iterator iter = children.begin();
for (; iter != children.end(); ++iter) {
NODE* child = *iter;
NODE* p = reverseTree(roots, child);
p->children.push_back(n);
}
return n;
}
you can do smth like this:
that is first reverse all children subtrees recursively, then
change the current node
- Anonymous April 25, 2012