int rankNode(Node* x, int key) { if(x == NULL) return 0; if(key < x->key) return rankNode(x->left, key); else if(key > x->key) return 1 + sizeNode(x->left) + rankNode(x->right, key); else return sizeNode(x); }
static Node* putNode(Node* x, int key, int value) { if(x == NULL) { x = (Node *) malloc(sizeof(Node)); x->key = key; x->value = value; x->count = 1; return x; } if(key < x->key) x->left = putNode(x->left, key, value); else if(key > x->key) x->right= putNode(x->right, key, value); else x->value = value; x->count = 1 + sizeNode(x->left) + sizeNode(x->right); return x; }
//my thought on this: no need to sort the original linked list //simply sort the int array, create a new linkedlist then return the new linkedlist //if we use malloc, rememer to free void sortNode (Node *head) { int size = sizeNode(head); int dataArray [size]; Node * current = head; int i = 0; while(current != NULL) { dataArray [i] = (*current).val; current = (*current).next; i++; } }
int sizeTree() { return sizeNode(root); }