3. A.
2.
4. 1 !
#
1 # :
• 0 # (data), H (height)
( # :
• # #
• ( # #
• 9 # #
. . " :
1. 8 " % 3
2. : 1 " &
#
3. 1 " &
( 23+1-1=15 )
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
$ % & ' ( )data =
0
1 2
3 4
5
6
7 8 9 10 11 12 13 14
A.
2.
5. !
*+
1 " ( % # ) :
• # " (data) :
• 0 (left)
• 0 ( (right)
• 0 % ( % % root)
. . " :
data
left
A
right
data
left
B
right
data
left
-
right
data
left right
data
left
*
right
data
left
/
right
" % : (left right) NULL ( #
( ( ).
root
A.
3. !
1. 8" C: "&
**
' C " :
• # (struct) ( :
• data # ( % ).
• left right ( # .
typedef int elem; /* typos dedomenwn dendrou*/
struct node{ /* Typos komvou dendrou */
elem data; /* dedomena */
struct node *left; /* aristero paidi */
struct node *right; /* deksi paidi */
};
typedef struct node TREE_NODE; /* Sinwnimo tou komvou dendrou */
typedef struct node *TREE_PTR; /* Sinwnimo tou deikti komvou */
# ( "& main).
A.
3. !
2. 8" C: !
*
' NULL
/* TR_init(): arxikopoiei to dendro */
void TR_init(TREE_PTR *root)
{
*root=NULL;
}
:
• ( " $
!
4. A.
3. !
3. 8" C: 0" – 9
*
' , #" NULL.
/* TR_empty(): epistrefei TRUE/FALSE
* analoga me to an to dendro einai adeio */
int TR_empty(TREE_PTR root)
{
return root == NULL;
}
A.
3. !
4. 8" C: + #
*
' $ ( ) # .
/* TR_data(): epistrefei ta dedomena tou komvou
pou deixnei o deiktis p */
elem TR_data(TREE_PTR p)
{
return p->data;
}
A.
3. !
5. 8" C: * ) %
*
' « % » # % :
1. #
2. % #
% «5»
data
left
5
right
)5:
root
* !
root
A.
3. !
5. 8" C: * ) %
*
/* TR_insert_root(): Eisagei to stoixeio x
sti riza tou dendrou */
int TR_insert_root(TREE_PTR *root,elem x)
{
TREE_PTR newnode;
if (*root!=NULL)
return FALSE;
newnode=(TREE_NODE *)malloc(sizeof(TREE_NODE));
if (!newnode)
{
printf("Adynamia desmeusis mnimis");
return FALSE;
}
newnode->data=x;
newnode->left=NULL;
newnode->right=NULL;
*root=newnode;
return TRUE;
}
5. A.
3. !
6. 8" C: * !
*!
' « » # :
1. #
2. # #
*51!-;-' «7» # 2»
data
left
5
right
data
left
2
right
data
left
4
right
data
left
1
right
node
data
left
7
right
A.
3. !
6. 8" C: * !
*"
/* TR_insert_left(): Eisagei to stoixeio x
ws aristero paidi tou node */
int TR_insert_left(TREE_PTR node,elem x)
{
TREE_PTR newnode;
if (node->left!=NULL)
return FALSE;
newnode=(TREE_NODE *)malloc(sizeof(TREE_NODE));
if (!newnode)
{
printf("Adynamia desmeusis mnimis");
return FALSE;
}
newnode->data=x;
newnode->left=NULL;
newnode->right=NULL;
node->left=newnode;
return TRUE;
}
A.
3. !
7. 8" C: * (
*#
' « ( » # ( :
1. #
2. ( # #
*51!-;-' «7» # 4»
data
left
5
right
data
left
2
right
data
left
4
right
data
left
1
right
node
data
left
7
right
A.
3. !
7. 8" C: * (
+
/* TR_insert_right(): Eisagei to stoixeio x
ws deksi paidi tou node */
int TR_insert_right(TREE_PTR node,elem x)
{
TREE_PTR newnode;
if (node->right!=NULL)
return FALSE;
newnode=(TREE_NODE *)malloc(sizeof(TREE_NODE));
if (!newnode)
{
printf("Adynamia desmeusis mnimis");
return FALSE;
}
newnode->data=x;
newnode->left=NULL;
newnode->right=NULL;
node->right=newnode;
return TRUE;
}
6. A.
3. !
8. 8" C: $ %
*
' % :
1. *" .
2. $ # .
3. % NULL
5!-)!.' %
data
left
5
right
)5:
root
* !
root
A.
3. !
8. 8" C: $ %
/* TR_delete_root(): Diagrafei ti riza enos
dentrou efoson den exei paidia */
int TR_delete_root(TREE_PTR *root, elem *x)
{
if ((*root)->left!=NULL || (*root)->right!=NULL)
return FALSE;
*x=(*root)->data;
free(*root);
*root=NULL;
return TRUE;
}
A.
3. !
9. 8" C: $ #
' # ( parent) $
:
1. *" .
2. $ .
3. left # parent NULL.
5!-)!.'
# «2»
data
left
5
right
data
left
2
right
data
left
4
right
data
left
1
right
parent
data
left
7
right
A.
3. !
9. 8" C: $ #
/* TR_delete_left(): Diagrafei to aristero paidi
tou komvou parent (efoson den exei paidia) */
int TR_delete_left(TREE_PTR parent, elem *x)
{
TREE_PTR current;
if (parent->left==NULL)
return FALSE;
current=parent->left;
if (current->left!=NULL || current->right!=NULL)
return FALSE;
*x=current->data;
free(current);
parent->left=NULL;
return TRUE;
}
7. A.
3. !
10. 8" C: $ ( #
' # ( parent) $ (
:
1. *" ( .
2. $ ( .
3. right # parent NULL.
parent
data
left
5
right
data
left
2
right
data
left
4
right
data
left
1
right
data
left
6
right
data
left
7
right
5!-)!.' (
# «4»
A.
3. !
10. 8" C: $ ( #
/* TR_delete_right(): Diagrafei to deksi paidi
tou komvou node (efoson den exei paidia) */
int TR_delete_right(TREE_PTR parent, elem *x)
{
TREE_PTR current;
if (parent->right==NULL)
return FALSE;
current=parent->right;
if (current->left!=NULL || current->right!=NULL)
return FALSE;
*x=current->data;
free(current);
parent->right=NULL;
return TRUE;
}
A.
4. &
1. -
!
" $ " $
:
*( % :
(preorder). " 3 :
+ $
! 8
( 8
(inorder). " 3 :
! 8
+ $
( 8
(postorder). " 3 :
! 8
( 8
+ $
A.
4. &
2. 8" C:
"
-------------------------------------------------------------
(PRE-ORDER)
:
: !"
-------------------------------------------------------------
procedure PRE-ORDER(n)
(n )
n
PRE-ORDER( n)
PRE-ORDER( n)
-
end procedure
n) 5! * !- *:'
5! *)!1'