Problem: Given a binary tree, write a method to get the width of the given binary tree. Width of a tree is maximum of widths of all levels in the tree.
Solution: Use level order traversal.
Implementation:
int BSTree::getWidth()
{
 int maxW = -1;
 if(!root)
  return maxW;
 std::queue<Node*> q[2];
 bool turn = 0;
 q[turn].push(root);
 while(!q[turn].empty())
 {
  int currW = q[turn].size();
  if(maxW < currW)
   maxW = currW;
  while(!q[turn].empty())
  {
   Node *temp = q[turn].front();
   if(temp->left)
    q[!turn].push(temp->left);
   if(temp->right)
    q[!turn].push(temp->right);
   q[turn].pop();
  }
  turn = !turn;
 }
 return maxW;
}
Complexity: O(n)
 
 
No comments:
Post a Comment