Computer Science 112b
Spring 2004
Ileana Streinu

CS 112
Final Examination
(Self-scheduled)


Name:

112b-ax account:

The exam is open book: you may consult your notes, books, even computer programs that you have written before. But all the work should be yours.

Show all your work: you may get partial credit. Add extra sheets if necessary.


  1. (10 points) Given the following code:

  2. struct Node{
    int info;
    Node* parent;
    Node* child;
    };

    main()
    {
    Node a1, a2;
    Node* b, b3, b4;
    b = &a1;
    a1.info = 5; a2.info = 4;
    b3=new Node;
    b4=new Node;
    b3->info = 10; b4->info = 3;
    a1.parent = new Node;
    a2.parent = &a1;
    b3->parent = &a2;
    b4->parent = &a1;
    b->parent->parent = NULL;
    b->parent->info = 20;
    b->child = &a2;
    }
     


  3. (34 points) Given the following structure definition:

  4. struct BNode{
    int x;
    BNode* y;
    BNode* z;
    };

    and the following definitions of variables:

    BNode a1, *a2, a3[5];
    BNode* b4[10];

    Which of the following is a valid C++ expression? (2 points each) Cross the invalid expressions.
     

    1. a2-> y . z
    2. a3[2].x ->x
    3. a2->z
    4. a4[2]->z->y->y.z
    5. a1.y
    6. a2.z
    7. a3[2].x
    8. a1.y.z
    9. a1.y -> z
    10. a1 -> z
    11. a2.y -> z
    12. a2->y ->y
    13. a3[2].x.z
    14. b4[5].y->z
    15. b4[5]->y->z->z
    16. b4[5]->y->z->z->x
    17. a3[2]->z->y


  5. (12 points) Write a short recursive C++ function (NOT a whole program!!!) to compute the minimum element in a binary search tree.

  6. The program should use the representation of a binary (search) tree as a pointer to the root node, where a tree node is a C++ structure defined as:

    struct TreeNode{
    int data;
    TreeNode* left;
    TreeNode* right;
    }

    Name your function minTree. It should take as argument the root and return an integer (the minimum value). Design the function as a separate entity, not as part of some binary tree class.

    If the recursive definition seems elusive but you have other ideas for solving this problem, I also accept other solutions. Warning: an iterative solution may not be easy to produce.
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     


  7. (10 points) Trace the stack behavior for the following recursive function call. What is the value printed in the main function?

    main()
    {
    cout << func(2,2);
    }


    int func(int a, int b)
    { if (a==0 || b== 0) return 1;
    return func(a, b-1)*func(a-1, b);
    }

     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     


  8. (18 points) Given the graph:

  9.  

     
     
     
     
     
     
     
     
     
     
     
     
     
     
     


     
     
     
     
     
     


  10. (6 points) Given the following binary tree:

  11.  

     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     

    Write down the vertices of the tree in prefix order (2 points), infix order (2 points) and postfix order (2 points).
     
     
     
     
     
     
     
     
     
     


  12. (10 points) Sort the list of numbers {15, 3, 12, 5, 1, 14, 2, 9, 7} using binary search trees.

  13.  
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     


    Enjoy your summer :-) Ileana