二叉树操作补充
层序遍历
思路:用队列的方法解决
- 创建一个空的队列,将根节点入队列,出队首元素,访问根节点
- 看左右子树是否为空,不为空,则将左右子树入队列,然后出队首元素访问(循环了)
- 队列重新为空时,则说明层序遍历结束,所以将队列为空作为循环结束条件。
//二叉树的层序遍历
//不能用递归做,需要创建一个空队列
public static void levelOrderTraversal(TreeNode root){
//思路:1.将根节点入队列,如果队列不为空,访问(打印)队首元素出队列
Queue<TreeNode> queue=new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()){//队列不为空,则代表层序遍历还没结束
//如果队列不为空,则取出队首元素
TreeNode t=queue.poll();
System.out.print(t.val+" ");
// 2.如果左右子树不为空,就将左右子树入队列,然后访问(打印)队首元素出队列(循环了)
if (t.left!=null){
queue.offer(t.left);
}
if (t.right!=null){
queue.offer(t.right);
}
}
}
public static void main(String[] args) {
TreeNode node = build();//手动构建一棵树
System.out.println("层序遍历结果为:");
levelOrderTraversal(node);
}
层序遍历结果为:
1 2 3 4 5 6 7 8