1 问题
给定一颗二叉树,要求逐层打印二叉树的数据,例如以下二叉树:
对这个二叉树进行层序遍历的结果为:1 ,2 ,3, 4, 5, ,6, 7
2 思路分析:
为了实现对二叉树的层序遍历,要求在遍历一个节点的同时,记录下它的孩子节点的信息,然后按照这个记录的顺序来访问节点的数据,在实现的时候可以采用队列来存储当前遍历到的节点的孩子节点,从而实现二叉树的层序遍历,遍历过程如下图所示。
如上图所示,首先把节点1放在队列中,然后开始遍历,节点1 出队,同时节点1的孩子节点2 和3 入队,2出队 ,然后2 的孩子节点 4和5 入队。依次类推
3 代码实现
public static void printLayer(BiNode root){
//定义一个队列来存节点的孩子节点
Queue<BiNode> queue = new LinkedList<>();
//如果为空节点 ,返回
if (root==null){
return;
}
//根节点先入队
queue.offer(root);
//队中有元素时,就一直循环
while (queue.size()>0){
//首节点出队
BiNode p = queue.poll();
System.out.println(p.date+" ");
//判断首节点的左子节点是否为空,不为空就加入队列
if (p.lchild!=null){
queue.offer(p.lchild);
}
if (p.rchild!=null){
queue.offer(p.rchild);
}
}
}
在层序遍历过程中,对各个节点只访问了一次,因此时间复杂度为O(N), 空间复杂度O(N)