That depends on the language, I doubt you could learn much about programming in a few weeks, it requires lots of practise.
> If I had to choose between teaching why an avl balanced binary search tree works and forcing students to implement in a chosen programming language from pseudocode, I would choose the former every time. The intellectual maturity is far more valuable -- and harder to acquire -- than the rote skill.
You are giving yourself a hard choice, just demonstrate both sides.
From personal experience, I've been looking at bst's recently. While messing around in my code, out of the blue I decided to write the struct for the node like this:
typedef struct avl_node_typed {
avl_node_typed *left, *right;
void *data;
unsigned height, population; /* avl algorithm requires height, not number of nodes */
}avl_node;
Then I realised that using this algorithm: avl_node *search_index(avl_node *node, int index) {
int x=0;
if(node->left)
x=node->left->population;
if(index>x)
return search_index(node->right, index-x-1);
else if(index<x)
return search_index(node->left, index);
else
return node;
}
I could access the nth node in a tree. I had rediscovered the algorithm of order statistic trees, which can be treated syntactically like an array (this can be applied to all ordered trees, not just avl). During this time I was looking up knowledge on avl trees and coding away on my machine. If I was purely focused on the algorithmic side, I don't think I would have found it.