Итак, формулировка проблемы, в которой я застрял и пытаюсь обратиться за помощью, заключается в следующем: в рамках моего задания нас попросили найти сумму данных, хранящихся во всех конечных узлахBST.Мы были шаблоном функции:
friend int Sum_Node_leaf_Data(BST *Root)
И ниже память объекта следующего класса действует как узел связанного списка, представляющего дерево двоичного поиска целых чисел.Если кто-то может предложить другую логику для этого.Я не могу исправить свою логическую ошибку, если кто-то из вас может указать и предложить что-то, было бы очень полезно.
class BST{
private: int info;
BST *left;
BST *right;
public: BST () {} //NULL Constructor.
};
логика, которую я сформировал для этой проблемы, заключается в том, что я объявляю и инициализируюпеременная целочисленного типа 'сумма' к нулю.ii) проверил, указывает ли корневой адрес на ноль.Если это не так, iii) проверил, указывают ли оба указателя 'left' и 'right' на Null, если false, то сумма добавляется с помощью 'info', хранящейся в том месте, куда указывает корневой указатель. После ее добавления, iv) два рекурсивных вызовак той же функции передаются значения «root-> left» и «root_> right» соответственно.
int Sum_Non_Leaf_Data(BST *Root){
int sum =0;
if(Root != NULL){
if(Root->left != NULL && Root->right !=NULL){
sum += Root_info;
Sum_Node_Leaf_Data(Root->left);
Sum_Node_Leaf_Data(Root->right);
}
return sum;
}
}
Но проблема в том, что, поскольку это функция recurive, значение sum каждый раз переинициализируется, поэтомуКак я могу вернуть целочисленное значение суммы.