【发布时间】:2015-06-29 11:07:13
【问题描述】:
int ma = INT_MIN;
int parent[1000];
int findMaxPath(struct node * ptr) {
if (ptr == NULL) return 0;
if (ptr->left == NULL && ptr->right == NULL) {
// means leaf node
int sum = ptr->data;
int temp = ptr->data;
while (parent[temp] != -1) {
sum = sum + parent[temp];
temp = parent[temp];
}
if (sum > ma)
ma = sum;
}
else{
if (ptr->left != NULL)
parent[ptr->left->data] = ptr->data;
if (ptr->right != NULL)
parent[ptr->right->data] = ptr->data;
findMaxPath(ptr->left);
findMaxPath(ptr->right);
}
}
方法 - 一旦我识别出叶节点,我使用父数组回溯到根节点并对所有值求和,如果这个和值大于最大值,则更新最大值。 我不确定这段代码的时间复杂度你能帮我看看这段代码的时间复杂度吗?
【问题讨论】:
-
这有点棘手,很大程度上取决于树的结构。对于具有单叶的单链树 - 它是
O(n)。对于完美的完整树,它是O(nlogn),对于每个右子树的高度正好为 1 的树,它是O(n^2)。 -
@amit 你能解释一下吗?对于树遍历它是 O(n) 但我对如何思考 while 循环部分感到困惑
标签: c++ algorithm recursion tree binary-tree