你会如何通过它的行打印二叉树?

时间:2017-03-15 02:52:20

标签: c algorithm

我是学习二叉树的新手。我试图找出如何通过它的行打印二叉树的值。

示例:

             .-------(098)-------.
      .--(012)--.         .--(402)--.
   (006)     (056)      (256)     (512)

将输出:

 >98
 >12
 >402
 >6
 >56
 >256
 >512

假设您获得了根节点。感谢您抽出宝贵时间提供帮助。

1 个答案:

答案 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’
  }
}