Трябва да създам функция, която взе дърво, което не е празно, да променя съдържанието на всеки лист в неговото поле, като поставя сумата от стойностите, съдържащи се във възлите на пътя от корена до листа (включително корена и листа).
Така че създадох това:
void sum(BinTree t) {
while(!t.isLeaf()) {
sumL += sum(t.left);
sumR += sum(t.right);
}
t.element = ?;
}
boolean isLeaf(BinTree t) {
return t.left == null && t.right == null;
}
Какво трябва да сложа на мястото на "?"? Не мисля, че функцията е правилна.. Не мога да създам рекурсивни функции за двоичните дървета, намирам ги за много сложни..
Благодаря
РЕДАКТИРАНЕ: Промених метода си:
void leafSum(BinTree t) {
sumLeaf(root, 0);
}
void leafSum(BinTree t, int tot) {
if(t->left == NULL && t->right == NULL)
t->elem = tot;
else {
sumLeaf(t->left, tot + t->elem);
sumLeaf(t->right, tot + t->elem);
}
}