Question

I need to define a main function that reads integers and prints them back in ascending order.

    For example, if the input contains

       12
       4
       19
       6

   the program should output

       4
       6
       12
       19

I need to use trees to do this however. I'm given the use of two functions insertavl, and deleteavlat my disposal. Their defintions are like so... http://ideone.com/8dwlU basically when deleteavl is called it deletes the node, and rebalances the tree accordingly ... If interested thier structures are in: http://ideone.com/QjlGe.

I've gotten this so far:

int main (void) {
   int number;
   struct node *t = NULL;
   while (1 == scanf("%d",&number)) {     
          t = insertavl(t, number);              
   }
   while (t != NULL){
      printf("%d\n",t->data);
      t = deleteavl(t, t->data);    
   }    
}

But this doesn't print them in ascending order. Any suggestions would be helpful? thanks in advance!

Était-ce utile?

La solution

Hint: in-order traversal on a BST is iterating the elements in ascending order.

Since an AVL Tree is a specific implementation of a BST, it also applies here.

EDIT: Explanation - why is this property of in-order traversal on a BST correct?

In in-order trvaersal, you access [print] each node after you accessed all the nodes in the left subtree. Since in a BST the root is bigger then all the nodes in the left subtree, it is what we wanted.

Also, in in-order traversal, you access each node before accessing all elements in the right sub-tree, and again, since it is a BST - this is exactly what we want.

(*)Note: This is not a formal proof, just an intuitive explanation why it is true.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top