标签: algorithm binary-tree time-complexity depth-first-search breadth-first-search
我意识到通用图上的BFS和DFS的运行时是O(n + m),其中n是节点数,m是边数,这是因为对于每个节点,必须考虑其邻接列表。但是,当它在二叉树上执行时,BFS和DFS的运行时是什么?我认为它应该是O(n),因为可以离开节点的可能边数是恒定的(即2)。请确认这是否正确理解。如果没有,那么请解释二叉树上BFS和DFS的正确时间复杂度是什么?
答案 0 :(得分:14)
BFS和DFS的时间复杂度仅为O(|E|),或者在您的情况下为O(m)。
O(|E|)
O(m)
在二叉树中,m等于n-1,因此时间复杂度等同于O(|V|)。 m指的是边的总数,而不是每个顶点的相邻边的平均数。
m
n-1
O(|V|)
答案 1 :(得分:9)
是的,O(n)是正确的。
另请注意,边数可以更准确地表示为节点数 - 1.通过考虑除了根之外的每个节点都有从其父节点到其自身的边缘,这很容易看出。边缘覆盖树中存在的所有边缘。