这是用于在二叉树中打印节点的祖先的标准算法,并且其花费O(n)时间复杂度。在二叉树中打印所有节点的祖先。我们可以用小于O(n^2)的时间复杂度来做到吗?
bool print(Node *node,int target){
if(node==NULL)
return false;
if(node->target==target)
return true;
if(print(node->left)||print(node->right)){
cout << node->data;
return true;
}
return false;
}
的问题是,如果我们需要打印的所有祖先的所有节点的,并存储在祖先每个节点的数组。时间复杂度是多少?我们可以做得比O(n^2)更好,即没有循环遍历每个节点并找到祖先。如果可能的话怎么做?
得以确认。按什么顺序?如果一个节点是多个节点的祖先,它是否必须多次打印?你似乎并不认为这棵树是平衡的。 –
这是一个非常奇怪的算法 - 使用从父到孩的指针会容易得多。 –
执行此操作所需的时间与输出的大小成正比。对于O(N log N)的平衡树。对于不平衡的树木,它是O(N^2) –