最简单的二叉树
typedef struct TNode { int have_value; int v; struct TNode *left, *right; } Node; Node *root; Node* newNode() { Node *u = (Node *)malloc(sizeof(Node)); if ( u != NULL ) { u -> have_value = 0; u -> left = u -> right = NULL; } return u; } void addNode( int v ) { Node *n = newNode(); n -> v = v; Node *c = root; while (1) { if ( v <= c->v ) { if ( c->left != NULL ) c = c->left; else { c->left = n; break; } } else { if ( c->right != NULL ) c = c->right; else { c->right = n; break; } } } } void printNodes(Node *n) { if ( n->left != NULL ) printNodes( n->left ); printf("%d ",n->v); if ( n->right != NULL ) printNodes( n->right ); } int main() { root = newNode(); root->v = 50; for ( int i = 0; i < 1<<6; i++ ) { addNode(rand()%100); } printNodes(root); return 0; }
广度优先查找:
void printNodesBFS() { int frount = 0, rear = 1; Node *q[(1<<6)+1]; q[0] = root; while ( frount < rear ) { Node *_n = q[frount++]; printf("%d ", _n->v); if ( _n->left != NULL ) q[rear++] = _n->left; if ( _n->right != NULL) q[rear++] = _n->right; } printf("\n"); }