Учитывая двоичное дерево со следующим свойством, что все его листовые узлы находятся на положительном знаке (+), а затем подписывают чередуются с корнем для этого пути. Таким образом, узел может иметь несколько знаков в зависимости от пути.Двоичное дерево с переменным знаком
Теперь нам нужно выяснить сумму каждого пути и всю сумму дерева.
for ex:
there are 5 paths in the given binary tree.
path 1: 10-2+3-4 = 7
path 2: 19-8+2-3+4 = 14
path 3: 12-11+17-3+4 = 19
path 4: 2-9+1-4 = -10
path 5: 21-9+1-4 = 9
overall sum 39
Проблема здесь решить знак каждого узла, который управляется узлом листа в его основной путь.
Я могу придумать решение с временной сложностью O (n) и пространством O (n), где я мог бы сохранять каждый путь в векторном перемещении от корня до нижнего &, затем определяя знак каждого узла, начиная с листового узла, вычисляя таким образом сумма каждого пути.
Теперь любой может предложить какой-либо улучшенный метод с сложностью пространства O (1). Любой из рекурсивного или итерационного метода будет предпочтительнее.
Надеюсь, что я четко объяснил вопрос. Тем не менее, если возникнут какие-либо сомнения, я скоро добавлю больше деталей.
EDIT: бинарное дерево хранится & реализована как этот & не в массиве
struct node
{
int data;
struct node* left;
struct node* right;
};
struct node* newNode(int data)
{
struct node* node = (struct node*)
malloc(sizeof(struct node));
node->data = data;
node->left = NULL;
node->right = NULL;
return(node);
}
int main()
{
struct node *root = newNode(1);
root->left = newNode(2);
root->right = newNode(3);
root->left->left = newNode(4);
root->left->right = newNode(5);
}
Пространство, необходимое для хранения дерева не могут быть сохранены в любом случае. пожалуйста, не входите в создание дерева. Предположим, что вам дан корневой узел дерева, с уже построенным деревом.
Я говорю о дополнительном пространстве, которое требуется для запуска определенного алгоритма для ответа на вопрос.
Вам нужно увеличить сумму? Не удалось понять критерии для определения знака нелистового узла. – sanjayk79
Нет, нам не нужно максимизировать сумму. Критерии просты: узлы листьев находятся под положительным знаком, а затем подписывают чередуются до корня для этого пути. Итак, узел может иметь несколько знаков в зависимости от пути – x0v
Что вы подразумеваете под O (1), вам нужно будет пройти через узлы по крайней мере один раз – sashas