# Include <stdio. h>
# Include <stdlib. h>
Typedef struct btree
{
Int data;
Struct btree * left;
Struct btree * right;
} Tree;
Void preorder (TREE * t );
Void insert (int K, tree * & T );
Int findpath (int K, tree * t );
Int main ()
{
Int N, K, I;
TREE * t = NULL;
Scanf ("% d", & N );
For (I = 0; I <n; I ++)
{
Scanf ("% d", & K );
Insert (K, t );
}
Preorder (t );
Putchar ('\ n ');
Scanf ("% d", & K );
Findpath (K, t );
Return 0;
}
Void insert (int K, tree * & T)
{
TREE * PF, * P, * newnode;
Newnode = (TREE *) malloc (sizeof (tree ));
Newnode-> DATA = K;
Newnode-> left = newnode-> right = NULL;
If (t = NULL) t = newnode;
Else
{
P = T;
While (P)
{
PF = P;
If (p-> DATA> K)
P = p-> left;
Else P = p-> right;
}
If (PF-> DATA> K)
PF-> left = newnode;
Else PF-> right = newnode;
}
}
Void preorder (TREE * t)
{
If (t)
{
Printf ("% d", T-> data );
Preorder (t-> left );
Preorder (t-> right );
}
}
Int findpath (int K, tree * t)
{
If (t = NULL)
Return 0;
If (t-> DATA = K)
{
Return 1;
}
Else
{
If (findpath (K, T-> left ))
{
Printf ("% d", T-> data );
Return 1;
}
If (findpath (K, T-> right ))
{
Printf ("% d", T-> data );
Return 1;
}
}
}
When I used recursion for the first time, I felt that recursion was actually very powerful, but it was a waste of space compared to recursion.