InOrder Iterative tree traversal


inOrderTraversalIterative(BinaryTree *root)
{
    stack s;

    cursor = root;                    //set cursor to root of binary tree
    done = false;

   while (!done)
   {
     if(cursor != NULL)
     {
        s.push(cursor);             //place pointer to node on the stack
                                    //before traversing the node's left subtree
        cursor = cursor->left();    //traverse the left subtree
     }
     else                        //backtrack from the empty subtree and
                                 //visit the node at the top of the stack;
                                 //however, if the stack is empty, you are
                                 //done
     {
        if (!s.empty())
        {
            cursor = s.top();
            s.pop();
            cout << cursor->data();
            cursor = cursor->right();
        }
     }
  }
}

Diameter of a Tree


int Diameter(TreeNode t, int* height)
{
    int lh = 0, rh = 0;
    int leftD = 0, rightD = 0;

    if(t == NULL)
    {
        *height = 0;
        return 0; /* diameter is also 0 */
    }

    leftD =  Diameter (root->left, &lh);
    rightD =  Diameter (root->right,&rh);

    /* Height of current node is max of heights of left and
    right subtrees plus 1*/
    *height = max(lh, rh) + 1;

    return max(lh + rh + 1, leftD, rightD);
}

C,C++