Chronus Interview Question
Software Engineer / Developersvoid binary_tree::update_left_sibling()
{
queue<node *> * q1 = new queue<node *>;
queue<node *> * q2 = new queue<node *>;
queue<node *> * cur_q;
queue<node *> * other_q;
//ya parvar digar
node * first_popped ;
node * cur_node ;
q1->push(root);
// cur_q = q1;
while(!q1->empty()||!q2->empty())
{
if(!q1->empty())
{
cur_q = q1 ;
other_q = q2 ;
}
else
{
cur_q = q2 ;
other_q = q1 ;
}
first_popped = cur_q->front();
do
{
cur_node = cur_q->front();
cur_q->pop();
if(cur_node->child[1]!=NULL)
other_q->push(cur_node->child[1]);
if(cur_node->child[0]!=NULL)
other_q->push(cur_node->child[0]);
if(!cur_q->empty())
{
cur_node->left = cur_q->front();
//cur_node = cur_node->left;
//cur_q->pop();
}
}while(!cur_q->empty());
cur_node->left = first_popped;
}
}
void AddSibling( Node *root )
{
Queue<int> que;
Node *temp;
Node *previous = root;
Node *levelFirst = root;
que.push( root ); /* Enqueue */
que.push( NULL ); /* NULL serve as level delimitor */
while ( !que.empty() )
{
temp = que.pop() ;
if ( temp == NULL )
{
levelFirst->sibling = previous ;
que.push( NULL );
temp = que.pop();
levelFirst = temp;
}
temp.sibling = previous ;
previous = temp;
if (temp->left )
que.push( temp->left );
if (temp->right )
que.push( temp->right );
}
}
- Dev August 03, 2011