Binary Tree - lovemoganna/DataStructure GitHub Wiki

Binary Tree


Binary tree layer by layer traversal

二叉树的最初形态

针对二叉树的宽度优先遍历(Width first traversal)

现在的二叉树

  • 需要打印成
  • 1
  • 2 3
  • 4 5 6
  • 7 8 这种情况

last:表示正在打印的当前行的最右节点. nlast:表示下一行的最右节点.

last用来换行
nlast记录着刚进入队列的节点,目前的下一层的最右节点 我们需要用队列来解决这个问题 队列

它的解决步骤是:

令last=节点1
将节点1放入队列中,弹出节点1并打印完毕
此时把节点1的孩子依次放入queue中.
令nlast=node2
nalast=node3 意思就是谁进入队列,nlast就记录谁. node3 node2
----------->
此时发现弹出的node1与last相等,此时换行.

此时nlast在node3上, 再从queue弹出node2,并打印 把node2的孩子node4放入queue中,令nlast=node4,弹出节点3,并打印.

把node3的孩子依次放入queue,放入node5时,nlast=node5,放入node6时,nlast=node6, 此时发现弹出的node3已经是last节点了,所以换行.

令last=nlast last变为node6,last成功的变成了下一行的最右节点.

当某一节点走到last层的时候,说明这一层打印完毕,需要打印换行.

接下来,让last等于当前行的last,正确的找到下一层的最右节点,从而完成换行.