我是学习二叉树的新手。我试图找出如何通过它的行打印二叉树的值。
示例:
.-------(098)-------.
.--(012)--. .--(402)--.
(006) (056) (256) (512)
将输出:
>98
>12
>402
>6
>56
>256
>512
假设您获得了根节点。感谢您抽出宝贵时间提供帮助。
答案 0 :(得分:3)
基本上BFS (breadth first search)会执行所需的操作。它的另一个名字是level-order-traversal
。它被称为级别顺序遍历的原因是它遍历树level by level
。
例如,对于二叉树,级别为:
.-------(098)-------. //level 0
.--(012)--. .--(402)--. //level 1
(006) (056) (256) (512) //level 2
另一个约定是级别从1开始。现在因为BFS
遍历树level by level
First 098 is visited and we are done with level 0
Then 012 and 402 is visited and we are done with level 1
Then 006 , 056 , 256 , 512 are visited and we are done with level 2
BFS
不仅适用于二叉树,它基本上是graph traversal algorithm,而且因为树只是一个图形,没有循环,我们可以也可以将它用于树。
根据所使用的数据结构,时间和空间的复杂程度各不相同:
如果adjacency matrix用于表示图表,则:
时间复杂度: O(V ^ 2)和 空间复杂度: O(V ^ 2)
如果adjacency list用于表示图表,则:
时间复杂度: O(V + E)和 空间复杂度: O(V + E)
以下是可以轻松转换为代码的BFS伪代码:
BFS(source vertex v)
{
Enque(v)
Mark v as visited.
While(Q is not empty)
{
Vertex v’ = deque(Q)
For all adjacent vertices of v’ that are not visited
{ Enque them and mark them as visited }
We are done with vertex v’
}
}