5 #include "lib_vbtree.h"
8 TreeNode *buildTree(FILE *in)
10 TreeNode *p = (TreeNode *)malloc(sizeof(TreeNode));
11 char str[MAX_WORD_SIZE+1];
13 fscanf(in, "%s", str);
14 if(strcmp(str, "@")==0) return NULL;
15 strcpy(p->data.word, str);
16 p->left = buildTree(in);
17 p->right = buildTree(in);
22 void vbtree_pre_order(TreeNode
*node
)
26 vbtree_pre_order(node
->left
);
27 vbtree_pre_order(node
->right
);
31 void vbtree_in_order(TreeNode
*node
)
35 vbtree_in_order(node
->left
);
36 vbtree_in_order(node
->right
);
40 void vbtree_post_order(TreeNode
*node
)
43 vbtree_post_order(node
->left
);
44 vbtree_post_order(node
->right
);
48 TreeNode
*newTreeNode(void *d
)
50 TreeNode
*p
= (TreeNode
*)malloc(sizeof(TreeNode
));
52 p
->left
= p
->right
= NULL
;
57 TreeNode *vbtree_find_insert(BinaryTree bt, TreeNode d)
60 TreeNode *curr = bt.root;
62 if(bt.root == NULL) return newTreeNode(NULL);
63 while((cmp = strcmp(d.word, curr->pData.word))!= 0)
67 if(curr->left == NULL) return curr->left = newTreeNode(d);
70 if(curr->right == NULL) return curr->right = newTreeNode(d);
77 int vbtree_node_count(TreeNode
*root
)
79 if(root
== NULL
) return 0;
80 return 1 + vbtree_node_count(root
->left
) + vbtree_node_count(root
->right
);
83 int vbtree_leave_count(TreeNode
*root
)
85 if(root
== NULL
) return 0;
86 if(root
->left
== NULL
&& root
->right
== NULL
) return 1;
87 return vbtree_leave_count(root
->left
) + vbtree_leave_count(root
->right
);
90 int vbtree_height(TreeNode
*root
)
92 int left
= 0, right
= 0;
93 if(root
== NULL
) return 0;
94 left
= vbtree_height(root
->left
);
95 right
= vbtree_height(root
->right
);
97 if(left
> right
) return 1 + left
;
98 else return 1 + right
;
102 * FUNCTION NOT COMPLETED
103 void deleteNode(TreeNode T)
105 if(T == NULL) return NULL;
106 if(right(T) ++ NULL) return left(T)
109 int vbtree_node_level(int n
)
120 void vbtree_insert_best(TreeNode
*lastNode
[])
122 static int numNodes
= 0;
123 int level
= vbtree_node_level(numNodes
);
124 TreeNode
*p
= newTreeNode(NULL
);
127 if(level
> 0) p
->left
= lastNode
[level
-1];
128 if(lastNode
[level
+1] != NULL
)
129 if(lastNode
[level
+1]->right
== NULL
)
130 lastNode
[level
+1]->right
= p
;
134 TreeNode
*vbtree_finalize_best(TreeNode
*lastNode
[])
136 int m
, n
= MAX_HEIGHT
- 1;
137 TreeNode
*root
= lastNode
[n
];
138 while(n
> 0 && lastNode
[n
] == NULL
) n
--;
141 if(lastNode
[n
]->right
!= NULL
) n
--;
143 TreeNode
*tn
= lastNode
[n
]->left
;
145 while(m
>= 0 && tn
== lastNode
[m
])
150 if(m
>= 0) lastNode
[n
]->right
= lastNode
[m
];